Mybtis整合DB2---解决DB2不支持换行问题
一、整合DB2
- 引入DB2引擎
<!--DB2驱动-->
<dependency>
<groupId>com.ibm.db2</groupId>
<artifactId>jcc</artifactId>
<version>${db2.version}</version>
</dependency>
- 连接DB2数据库
driverClassName: com.ibm.db2.jcc.DB2Driver
url: jdbc:db2://127.0.0.1:30802/testdb:currentSchema=${Schema名};
validationQuery: SELECT current timestamp FROM sysibm.sysdummy1;
二、疑难问题
2.1 DB2不支持换行符问题
2.1.1 问题描述
在mybatis映射文件中写sql语句时如果有折行情况就报错,db2说有非法字符。原因是db2数据库默认回车符就是去执行sql语句。db2控制台提供了 ‘db2 -td;’ 这个命令,意思是sql语句以分号结束,这样在控制台执行sql语句时就可以换行了,要命的是即使在控制台该命令也只是在本次回话中有效。但是现在和mybatis结合使用,无法解决这个问题。
故最终只能采取修改Mybatis源码的方式,将sql中的换行符替换掉。主要实现如下。
2.1.2 代码实现【**不优雅的解决方式(验证时用);代码优化见2.1.3】
- 覆盖源代码的StaticTextSqlNode和TextSqlNode。创建源代码一模一样的的包路径和类,如下图:
使得,mybatis会走到我们本地创建的路径下的StaticTextSqlNode和TextSqlNode来。然后再原来来吗的基础上,去替换掉sql的换行符
StaticTextSqlNode
TextSqlNode
再次执行DB2 sql , 就不会因为换行符报错了
2.1.3 代码优化
1、新增一个mybatis的拦截器,处理替换换行符
继承org.apache.ibatis.plugin.Interceptor,重写intercept方法
2、添加拦截器
可以参考:https://blog.csdn.net/liang0000zai/article/details/102862284