修改 ibatis 分頁機制(ORACLE物理分頁)

針對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是從那個表來的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章