自由飞翔

我在仰望,java之上

统计

留言簿(2)

我关注的blog

阅读排行榜

评论排行榜

ibatis扩展example类对数据库分页的实现(转载)

文章来源:http://blog.csdn.net/lu_yongchao/article/details/6209166

mysql:

sql代码:

select  *  from   user   where ... order   by ... limit 10,25  
根据以上的语句我们可以对ibator生成后的代码进行修改。 
第一修改User_sqlMap.xml 
修改前:

  1. < select   id = "ibatorgenerated_selectByExample"           resultMap = "ibatorgenerated_BaseResultMap"   
  2.      parameterClass = "com.demo.ibatis.beans.UserExample" >   
  3.     select ID, LOGIN_NAME, PASSWORD   
  4.     from user   
  5.      < isParameterPresent >   
  6.          < include   refid = "user.ibatorgenerated_Example_Where_Clause"   />   
  7.                 < isNotNull   property = "orderByClause" >   
  8.                 order by $orderByClause$   
  9.                         </ isNotNull >   
  10.          </ isParameterPresent >   
  11. </ select >  

修改后:
  1. < select   id = "ibatorgenerated_selectByExample"   resultMap = "ibatorgenerated_BaseResultMap"   
  2.          parameterClass = "com.demo.ibatis.beans.UserExample" >   
  3.         select ID, LOGIN_NAME, PASSWORD   
  4.         from user   
  5.      < isParameterPresent >   
  6.          < include   refid = "user.ibatorgenerated_Example_Where_Clause"   />   
  7.              < isNotNull   property = "orderByClause" >   
  8.                 order by $orderByClause$   
  9.                          </ isNotNull >   
  10.             [b] < isNotNull   property = "limitClauseStart" >   
  11.                 limit   
  12.                 $limitClauseStart$,$limitClauseCount$   
  13.              </ isNotNull > [/b]   
  14.      </ isParameterPresent >   
  15. </ select > 

重要的是黑色的字体是添加到原来的xml中的。接下来修改UserExample.java 
在该类中添加两个字段和相应的getter/setter方法
Java代码
  1. protected  String limitClauseStart; //起始参数   
  2. protected  String limitClauseCount; //数量参数  

接下来就可以通过Dao调用selectByExample()方法测试,好的以上就是MySql的分页。
SqlServer:

SqlServer的分页比较难了,因为 SqlServer中没有limit的关键字。 
看看SqlServer的分页语句,那当然 SqlServer人分布方法有很多种。这里我采用其中的一种。 
语句如下:

  1.    SELECT   TOP  页大小 *   
  2.    FROM  TestTable   
  3.    WHERE  (ID  NOT   IN   
  4.           ( SELECT   TOP  页大小*页数 id   
  5.           FROM  表   
  6.           ORDER   BY  id))   
  7. ORDER   BY  ID 

接下来和上面的MySql一样也进行修改 
修改xml

  1. < select   id = "ibatorgenerated_selectByExample"   resultMap = "ibatorgenerated_BaseResultMap"   
  2.          parameterClass = "com.demo.ibatis.beans.UserExample" >   
  3.         [b]  < isNotNull   property = "limitClauseStart" >   
  4.             SELETE TOP $limitClauseCount$ * FROM user where (ID NOT IN    
  5.                        (SELECT TOP $limitClauseStart$ ID    
  6.                    </ isNotNull > [/b]   
  7.                     < isNull   property = "limitClauseStart" >   
  8.             SELETE *    
  9.            </ isNull >   
  10.                     FROM user    
  11.         from user   
  12.      < isParameterPresent >   
  13.          < include   refid = "user.ibatorgenerated_Example_Where_Clause"   />   
  14.              < isNotNull   property = "orderByClause" >   
  15.                 order by $orderByClause$   
  16.                                [b]   < isNotNull   property = "limitClauseStart" >   
  17.                      ))order by $orderByClause$   
  18.                      </ isNotNull > [/b]   
  19.                          </ isNotNull >   
  20.      </ isParameterPresent >   
  21. </ 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,
  1. < select   id = "ibatorgenerated_selectByExample"       resultMap = "ibatorgenerated_BaseResultMap"   
  2.          parameterClass = "com.demo.ibatis.beans.UserExample" >   
  3.         [b]  < isNotNull   property = "limitClauseStart" >   
  4.             select* from(select rownum tid,user.* FROM (   
  5.                    </ isNotNull > [/b]   
  6.                    select * from user   
  7.      < isParameterPresent >   
  8.          < include   refid = "user.ibatorgenerated_Example_Where_Clause"   />   
  9.              < isNotNull   property = "orderByClause" >   
  10.                 order by $orderByClause$                 
  11.                          </ isNotNull >   
  12.                         [b]   < isNotNull   property = "limitClauseStart" >   
  13.                     <![[CDATA )user where where rownum<$limitClauseCount$+$limitClauseStart$+1) where tid>$limitClauseStart$;]]>  
  14.                   </ isNotNull > [/b]   
  15.      </ isParameterPresent >   
  16. </ select >   









Gavin

posted on 2012-02-03 10:05 GavinMiao 阅读(3189) 评论(0)  编辑  收藏 所属分类: ibatis


只有注册用户登录后才能发表评论。


网站导航: