解决Mybatis结合db2时sql语句换行出现的问题
最近项目用到mybatis3.1和db28.1版本的数据库,出现一个问题,我研究半天把mybatis源码给改了,竟然成功解决。
直接入正题:在mybatis映射文件中写sql语句时如果有折行情况就报错,db2说有非法字符。原因是db2数据库默认回车符就是去执行sql语句,db2控制台提供了 'db2 -td;' 这个命令,意思是sql语句以分号结束,这样在控制台执行sql语句时就可以换行了,要命的是即使在控制台该命令也只是在本次回话中有效。但是现在和mybatis结合使用,无法解决这个问题。我想到了改mybatis源码,千辛万苦找到了对应的代码如下:
org.apache.ibatis.builder.annotation.MapperAnnotationBuilder中buildSqlSourceFromStrings方法负责将xml中sql语句解析出来,但是在将字符串的sql转换成TextSqlNode对象是代码如下:
1. contents.add(new TextSqlNode(sql.toString()));
2. public TextSqlNode(String text) {
this.text = text;
}
就在第二步mybatis没有对sql字符串中的换行符做处理导致上面的问题,其实代码改动非常小,就是把换行符和回车符替换成空格:
public TextSqlNode(String text) {
this.text = text.replaceAll("\n|\r", " ");
}
至此重新打jar包放到项目中,HLL的成功了!
PS:有个小问题,mybatis没有开放ognl相关的类,100多个啊,我一个一个down下来的。求解释。。。
附jar包一份~
解决Mybatis结合db2时sql语句换行出现的问题相关推荐
- DB2中sql语句占位符问题
初到公司实习,让做一个网站,使用struts2+spring框架,数据库使用的是DB2,以前没接触过DB2,对它不了解.在写sql语句的时候遇到一些问题,首先就是在mysql下的limit到了DB2中 ...
- mybatis log4j 在日志中打印sql_SpringBoot整合MyBatis+详细打印执行SQL语句
图片来源网路 为啥写这篇文章呢,有人可能会说springBoot的mybatis的starter都有了写这篇文章不是多此一举吗?难道是真的吗?其实我一开始也是使用mybatis的starter的,但是 ...
- db2经典SQL语句大全
db2经典SQL语句大全 下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL-数据定义语言(CREATE,ALTER,DROP,DECLARE) DML-数据操纵语言 ...
- MyBatis超详细介绍——SQL语句构建器类
MyBatis超详细介绍--SQL语句构建器类 (本文作为学习笔记,了解更多请参考:MyBatis参考文档) MyBatis3提供了SQL类帮助构造SQL语句: private String sele ...
- Mybatis映射文件动态SQL语句-01
因为在很多业务逻辑复杂的项目中,往往不是简单的sql语句就能查询出来自己想要的数据,所有mybatis引入了动态sql语句, UserMapper.xml <?xml version=" ...
- DOTNET零碎总结---VB.NET修改数据存在多个txtbox时,SQL语句的操作
2.DOTNET零碎总结---VB.NET修改数据存在多个txtbox时,SQL语句的操作 1. 一个Button1的text为查询和一个DataGridView1,点击查询按钮的代码 Private ...
- 自增长主键值设为null时sql语句执行报错
自增长主键值设为null时sql语句执行报错 1.在进行用户信息添加时,需要把界面获取的数据参数添加到mysql数据库中,数据库表创建方法如下: 可以看出已经把字段id设置为自增长类型的主键(已经标有 ...
- Mybatis 开启控制台打印sql语句
概述 springboot+mybatis整合过程中,开启控制台sql语句打印的多种方式: 方法1 在springboot+mybatis整合中,可以将springboot的配置文件添加如下一段也可: ...
- oracle大于号怎么用,解决MyBatis的mapper中SQL小于号或大于号报错-tag name expected
通常写SQL我们都会在Navicat里面写好条件测试没问题之后才会把SQL放到mapper里面,有次我在写Oracle的分页的时候因为用到了<=符号,在Navicat测试的时候是没问题的,但是放 ...
最新文章
- python3 进程池中使用队列Queue
- visual studio 阅读 linux-kernel
- ReSharper 配置及用法(转)
- PS效果教程——冒充手绘效果
- html日历显示不完整,求html代码,显示日历和时间的代码
- Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2)(A - D)
- 高性能开发,别点,发际线要紧!
- 如何将你的Qt项目打包安装在MeeGo系统中
- java数组按某个值排序_Js--使用sort根据数组中对象的某一个属性值进行排序
- 当年叱咤风云的框架Struts2,你可知Struts2内功如何修炼之体系结构
- 如何部署一台DELL虚拟化服务器:CentOS7.4系统,虚拟化技术
- 线程安全问题和Synchronized的使用
- 网络安全实验室 基础题 解析
- 记录一个好用的压缩软件 HandBrake
- IOS开发之UI进阶(设置圆角,边框颜色,边框宽度)
- 个人计算机中的防病毒软件无法,为什么无法在计算机上安装360防病毒软件?
- Ubuntu11.10安装科磊NW336驱动
- PS怎么旋转图片方向
- bootstrap-table的refresh查询
- php 图片上加文字,php使用GD库实现图片上添加文字的方法(代码)