針對ibatis 分頁機制的修改例子網上也有很多,本人也是參考後做的修改.如下:
1、首先增加配置文件
此類是繼承地層分頁代碼從而實現修改SQL語句
修改語句接口
實現類
2、增加繼承類(ibatis調用地層類)
本人使用springside作爲執行數據庫地層類,所以直接修改IBatisGenericDao繼承爲XSqlMapClientDaoSupport就可以
3、爲所有SPRING配置文件增加初始化方法,作用是修改IBATIS地層SqlMapClientDaoSupport的實現類,使用我們自己寫的類,以便方便控制於修改SQL
到此步,已經完成分頁修改,和網上說的改法基本一致。
原理,初始化自己BEAN的同時也會初始化到父類父類。。。默認初始化方法initialized來進行修改IBATIS
經測試出現問題:已知一未初始化SQLMAP,使用分頁進行初始化(SQLMAP會多映射一列,ORACLE3層分頁導致),在進行不分頁查詢會出現少列錯誤,也就是說SQLMAP 多了一個映射列,查詢語句無法進行完整匹配。SQLMAP唯一不足的是:SQLMAP映射可以不查詢出的列少,但是絕對不允許多,現在我們使用分頁初始化就多出一列。本人的解決辦法是直接修改JAR包(未找到好的解決辦法)
com.ibatis.sqlmap.engine.mapping.result.ResultMap 中 getPrimitiveResultMappingValue方法進行修改
增加過濾條件判斷
if(columnName.equals("ROWNUM_"))
value = "";
(直接哪JAVA文件進行修改編譯,然後直接替換包中CLASS,如需要可以所要)
最後提一點,也是容易忽略的地方,加了ORACLE分頁後,原始SQL不能出現重複列、rownum,否則提示無法映射列錯誤!如 select * from tablea as a, tableb as b where a.id=b.id 這樣語句加上分頁就會出現ID無法映射,兩表都包含ID外層分頁SQL無法解析ID是從那個表來的。