首页 > 代码库 > mybatis oracle 分页+模糊查询

mybatis oracle 分页+模糊查询

实现分页的方式有很多,但常用的是通过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 )A12             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>)A12             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、返回值也要做相应的修改。

 

mybatis oracle 分页+模糊查询