精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-10-11
最近项目用到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包一份~ 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 4559 次