实现分页的方式有很多,但常用的是通过SQL来显示分页。
下面就来介绍mybatis 来实现Oracle分页的写法:(ps:不同数据库的写法有区别)
一、分页数据:
1 <select id="findPageByCode" parameterType="java.util.Map" resultMap="pageVO"> 2 select * from 3 ( 4 select A.* ,ROWNUM rn 5 from (select co_code,co_name 6 from IP_COMPANY 7 <where> 8 <if test=‘co_code != null and co_code!=""‘ > 9 co_code like ‘‘||#{co_code}||‘%‘ 10 </if> 11 </where> ORDER BY co_code )A 12 13 <if test=‘pageNumStop != null and pageNumStop!=""‘ > 14 <![CDATA[where ROWNUM <=#{pageNumStop}]]> 15 </if> 16 ) 17 <if test=‘pageNumBegin != null and pageNumBegin!=""‘ > 18 Where rn >=#{pageNumBegin} 19 </if> 20 </select>
解释:
1、由于传递多个参数,所以使用Map集合,也可以使用pojo对象,但是变量名要保持一致。
2、由于我的需求是向右模糊查询所以写成 co_code like ‘‘||#{co_code}||‘%‘ 的形式,可以根据自己的需求修改%。
3、使用<![CDATA [ ]]>是为了过滤掉文本字段。这里我还有点不是很明白,因为传过来的pageNumStop是int型的吗?
那么下面的Where rn >=#{pageNumBegin} ,不加<![CDATA[]]>也可以通过。
4、rn是ROWNUM的别名。
5、第三个select开始是你要查询的数据。
二、记录总数:
1 <select id="selectCount" parameterType="java.util.Map" resultType="int"> 2 select * from 3 ( 4 select A.* ,ROWNUM rn 5 from (select count(*) 6 from IP_COMPANY 7 <where> 8 <if test=‘co_code != null and co_code!=""‘ > 9 co_code like ‘‘||#{co_code}||‘%‘ 10 </if> 11 </where>)A 12 13 <if test=‘pageNumStop != null and pageNumStop!=""‘ > 14 <![CDATA[where ROWNUM <=#{pageNumStop}]]> 15 </if> 16 ) 17 <if test=‘pageNumBegin != null and pageNumBegin!=""‘ > 18 Where rn >=#{pageNumBegin} 19 </if> 20 </select>
解释:
1、和上面没什么太大区别,只是通过count()函数来查询记录的总数。
2、返回值也要做相应的修改。
时间: 2024-10-10 06:58:07