博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
项目支持多数据库
阅读量:3931 次
发布时间:2019-05-23

本文共 1884 字,大约阅读时间需要 6 分钟。

这里写目录标题

1.JDBCTemplate

基本与jdbc连接数据库的代码差不多,要支持多数据库,最关键的是分页的语句。

解决思路:编写一个统一处理sql的方法,接收业务SQL,根据不同的数据库类型,返回最终处理好的分页SQL。

@Repositorypublic class BaseDao {
/** * 处理业务SQL为可分页SQL * * @param sql 业务sql * @param start 开始索引 = (页号 - 1 ) * 每页条数 * @param end 结束索引 = 页号 * 每页条数 * @param valueList 参数list * @return */ public String searchByPage(String sql, int start, int end, List valueList) {
String ret = ""; String dbType = ConfigUtil.getInstance().getDbType(); switch (dbType) {
case "oracle": ret = "SELECT * FROM (SELECT A.*, ROWNUM RN FROM (" + sql + ") A WHERE ROWNUM <= ? ) TEMP WHERE RN > ?"; valueList.add(end); valueList.add(start); break; case "db2": ret = "SELECT * FROM (SELECT TEMP.*, ROW_NUMBER() OVER() AS NUM FROM (" + sql + ") TEMP ) WHERE NUM <= ? AND NUM > ?"; valueList.add(end); valueList.add(start); break; case "sqlserver": sql = sql.replaceFirst("select", ""); sql = sql.substring(0,sql.lastIndexOf("order by")); String str = sql.substring(0,sql.indexOf(",")); ret = "select * from ( select row_number() over(order by " + str + " desc) as row," + sql + " ) tt where tt.row BETWEEN ? and ?"; valueList.add(start+1); valueList.add(end); break; case "mysql": ret = sql + " LIMIT ?, ?"; valueList.add(start); valueList.add(end - start); break; default: ret = "not support db type, is " + dbType; break; } return ret; }}

2. mybatis之mapper动态代理

参考文档:

oracle,mysql都可以用concat()函数进行连接,oracle的concat()只能传入两个参数,而mysql的可以传入多个参数,sqlserver则不能用concat()函数 ,只能用+来进行字符串的连接。

  • 解决方式一:同一个mapper.xml,根据属性databaseId区分不同数据库

    缺点:同样的sql要写很多份,文件异常庞大臃肿。不建议
    升级:拆成多个xml。不建议

  • 解决方式二:根据不同的数据库,选用不同的mapper.xml

    mapper映射采用在mybatis的配置文件中指定路径进行批量映射。
    实现方式:通过配置文件读取到数据库类型,统一转换大小写,作为文件夹名称,每个数据库都有一个对应的存放mapper.xml的文件夹。
    缺点:这种办法导致mapper.xml好几份,差别不大,很浪费,不建议使用。
    升级:使用插件

  • 解决方式三:使用分页插件

    • PageHelper
      原理:通过拦截器,在SQL真正执行前拦截下来,重新改造(eg:改为分页SQL),再继续执行改造好的SQL。

转载地址:http://qwqgn.baihongyu.com/

你可能感兴趣的文章
javascript DOM详解之DOM1
查看>>
javascript DOM扩展
查看>>
矛盾论读书笔记
查看>>
规则 - 利用CDN缓存
查看>>
什么是统计学中的 Standard Error ( SE )?
查看>>
统计学中的标准差(SD)和 平均值的标准误差(SEM)的区别
查看>>
[数据挖掘与预测分析] 单变量统计分析思考问题
查看>>
[统计学笔记] (十三)指数分析(2)
查看>>
Data Science 到底是什么?
查看>>
机器学习(Machine Learning)和传统的数据统计分析(Data Statistics)有什么区别?
查看>>
统计学、统计学习和统计推断之间的关系
查看>>
PMP笔记:质量管理的七个工具
查看>>
悦读:重新定义公司-谷歌是如何运营的
查看>>
研发主管的烦恼:周一早晨延迟的项目会议
查看>>
研发主管的烦恼:难以执行的绩效考核
查看>>
精益Scrum(五)
查看>>
精益Scrum(六)
查看>>
精益Scrum(七)
查看>>
软件测试管理—如何写好软件测试计划书
查看>>
解读一名软件测试经理所需要具备的能力
查看>>