天天看點

解決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包一份~

繼續閱讀