mybatis中Oracle分页语句的写法

最近一段时间使用oracle数据库查询分页, 用的是springboot.

Oracle数据库中没有像mysql中limit的写法, 只能换其他方式写.

考虑到oracle中的ROWNUM变量, 使用它能做到分页查询.

看下面的mybatis的xml文件:

<select id="selectDevicesWithBootGrid" parameterType="java.util.Map" resultType="java.util.Map">
    select
    <include refid="Base_Column_List" />
    from
    (
      SELECT
        D.ID, D.NAME, D.AGE, ROWNUM RN
      FROM
        (
         SELECT
            ID, NAME, AGE
         FROM
            DEVICES d
         <trim prefix=" where (" suffix=") ">
           <if test="searchPhrase != null">
             d.ID like '%'||#{searchPhrase, jdbcType=VARCHAR}||'%'
             or d.NAME like '%'||#{searchPhrase, jdbcType=VARCHAR}||'%'
             or d.AGE like '%'||#{searchPhrase, jdbcType=VARCHAR}||'%'
           </if>
         </trim>
         <trim prefix=" order by " suffix=" " suffixOverrides=",">
            <if test="idSort != null" >
              ID ${idSort},
            </if>
            <if test="nameSort != null" >
              NAME ${nameSort},
            </if>
            <if test="ageSort != null" >
              AGE ${ageSort},
            </if>
         </trim>
        ) D
      WHERE ROWNUM &lt;= #{rowCount,jdbcType=INTEGER}
    )
    WHERE RN &gt;= #{offSet,jdbcType=INTEGER}
  </select>

这里主要注意下面几个问题:

1. mybatis 中 SQL 写在mapper.xml文件中,而xml解析 < 、>、<=、>= 时会出错,这时应该使用转义写法









猜你喜欢

转载自www.cnblogs.com/xumBlog/p/11739528.html