PAP 快速开发框架:mybatis

    背景: 在使用mybatis的过程中,考虑到整合的框架在后期使用的过程中,有可能是需要兼容到多种数据库的,在这种前提条件下,完成通用CRUD功能的编写,本文前期先考虑到不同数据库针对分页功能的统一操作;例如mysql数据库的分页是limit关键字的使用, oracle数据库的分页是rownum关键字的使用;

    demo git地址部分: http://git.oschina.net/alexgaoyh/MutiModule-parent/commit/8e83bb3e5eca7e711a88927905343e499cac359e

    此例中主要使用的属性为  databaseIdProvider , 通过这个属性的使用,来生成支持多种数据库的sql分页语句:

    MutiDatasourcePaginationPlugin  类文件为扩展的mybatis-generator 插件,用来在生成代码文件的过程中,完成不同数据库支持下的分页逻辑代码部分;

    此例中只需要关心生成的 MutiDatabaseMapper.xml:

1<select id="selectByExample" resultMap="BaseResultMap" 2 parameterType="com.alexgaoyh.MutiModule.persist.mutiDatabase.MutiDatabaseExample"> 3 <include refid="OracleDialectPrefix" /> 4 select 5 <if test="distinct"> 6 distinct 7 </if> 8 <include refid="Base_Column_List" /> 9 from mutidatabase mutiDatabase 10 <if test="_parameter != null"> 11 <include refid="Example_Where_Clause" /> 12 </if> 13 <if test="orderByClause != null"> 14 order by ${orderByClause} 15 </if> 16 <include refid="OracleDialectSuffix" /> 17 <include refid="MysqlDialect" /> 18 </select> 19 20 <sql id="OracleDialectPrefix"> 21 <if test="page != null and _databaseId == 'oracle'"> 22 select * from ( select row_.*, rownum rownum_ from ( 23 </if> 24 </sql> 25 <sql id="OracleDialectSuffix"> 26 <if test="page != null and _databaseId == 'oracle'"> 27 <![CDATA[ ) row_ ) where rownum_ > #{page.begin} and rownum_ <= #{page.end} ]]> 28 </if> 29 </sql> 30 <sql id="MysqlDialect"> 31 <if test="page != null and _databaseId == 'mysql'"> 32 limit #{page.begin} , #{page.length} 33 </if> 34 </sql>

这样,通过 databaseIdProvider  的不同,就完成不同sql语句的引入操作;

    部分链接:

        http://stackoverflow.com/questions/29139092/mybatis-multi-datasource-configuration-issue

        https://mybatis.github.io/spring/factorybean.html

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )