ibatis 實現 物理層級的 分頁 相容多種資料庫(轉載)

來源:互聯網
上載者:User

最近在看iBatis時,想做用動態Sql做個分布。因為在做項目時用iBator工具產生沒有分頁的功能,只有一些我們常用的功能。所以要對產生後的代碼做修改。我在Java高手真經的一書中看到有做了MySql SqlServer Oracle的分頁。實現如下:
MySql-->
首先說說MySql的分頁語句 Sql代碼 select * from user where...order by... limit 10,25     

  

根據以上的語句我們可以對ibator產生後的代碼進行修改。
第一修改User_sqlMap.xml
修改前 Xml代碼 <select id="ibatorgenerated_selectByExample"         resultMap="ibatorgenerated_BaseResultMap"       parameterClass="com.demo.ibatis.beans.UserExample">       select ID, LOGIN_NAME, PASSWORD        from user        <isParameterPresent>           <include refid="user.ibatorgenerated_Example_Where_Clause" />                  <isNotNull property="orderByClause">                   order by $orderByClause$                           </isNotNull>           </isParameterPresent>   </select>  
 


修改後 Xml代碼 <select id="ibatorgenerated_selectByExample" resultMap="ibatorgenerated_BaseResultMap"           parameterClass="com.demo.ibatis.beans.UserExample">           select ID, LOGIN_NAME, PASSWORD            from user        <isParameterPresent>           <include refid="user.ibatorgenerated_Example_Where_Clause" />               <isNotNull property="orderByClause">                   order by $orderByClause$                            </isNotNull>               [b]<isNotNull property="limitClauseStart">                   limit                    $limitClauseStart$,$limitClauseCount$                </isNotNull>[/b]        </isParameterPresent>   </select>  

 


重要的是黑色的字型是添加到原來的xml中的。接下來修改UserExample.java
在該類中添加兩個欄位和相應的getter/setter方法 Java代碼 protected String limitClauseStart;//起始參數    protected String limitClauseCount;//數量參數  

 


接下來就可以通過Dao調用selectByExample()方法測試,好的以上就是MySql的分頁。SqlServer的分頁比較難了,因為 SqlServer中沒有limit的關鍵字。
看看SqlServer的分頁語句,那當然 SqlServer人分布方法有很多種。這裡我採用其中的一種。
語句如下: Sql代碼   SELECT TOP 頁大小 *      FROM TestTable      WHERE (ID NOT IN             (SELECT TOP 頁大小*頁數 id             FROM 表             ORDER BY id))    ORDER BY ID  

 


接下來和上面的MySql一樣也進行修改
修改xml Xml代碼 <select id="ibatorgenerated_selectByExample" resultMap="ibatorgenerated_BaseResultMap"           parameterClass="com.demo.ibatis.beans.UserExample">           [b] <isNotNull property="limitClauseStart">               SELETE TOP $limitClauseCount$ * FROM user where (ID NOT IN                            (SELECT TOP $limitClauseStart$ ID                       </isNotNull>[/b]                       <isNull property="limitClauseStart">               SELETE *               </isNull>                       FROM user             from user        <isParameterPresent>           <include refid="user.ibatorgenerated_Example_Where_Clause" />               <isNotNull property="orderByClause">                   order by $orderByClause$                                   [b]  <isNotNull property="limitClauseStart">                        ))order by $orderByClause$                        </isNotNull>[/b]                            </isNotNull>       </isParameterPresent>   </select>  

 

接下來是ORacle的,和上面都是差不多的這裡不多說。
文法:
select* from(select rownum tid,user.* FROM (select * from user where id>1 order by ID desc)user where where rownum<35) where tid>10;
修改Xml, Xml代碼 <select id="ibatorgenerated_selectByExample"     resultMap="ibatorgenerated_BaseResultMap"           parameterClass="com.demo.ibatis.beans.UserExample">           [b] <isNotNull property="limitClauseStart">               select* from(select rownum tid,user.* FROM (                      </isNotNull>[/b]                       select * from user        <isParameterPresent>           <include refid="user.ibatorgenerated_Example_Where_Clause" />               <isNotNull property="orderByClause">                   order by $orderByClause$                                          </isNotNull>                           [b]  <isNotNull property="limitClauseStart">                      <![[CDATA )user where where rownum<$limitClauseCount$+$limitClauseStart$+1) where tid>$limitClauseStart$;]]>                    </isNotNull>[/b]        </isParameterPresent>   </select> 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.