mybatis中Oracle分页语句的写法

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

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

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

看下面的mybatis的xml文件:sql

<select id="selectDevices" 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 WHERE ROWNUM &lt;= #{rowCount,jdbcType=INTEGER} ) WHERE RN &gt;= #{offSet,jdbcType=INTEGER} </select>

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

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

  <               <= > >=    &       '            "
&lt;  &lt;=       &gt;         &gt;=          &amp;        &apos;        &quot;      

示例: num &gt;= #{num}mybatis

或则直接oracle

<![CDATA[  sql语句  ]]>app

示例:num <![CDATA[ >= ]]> #{num}spa


2.  里面的rowCount参数和offSet参数的含义

例如: 规定每页显示10条数据, pageSize = 10,  下面就是前台传过来的数据

offSet=(currentPage–1)*pageSize + 1 ,  rowCount=currentPage*pageSize

第一页的话,currentPage=1, offSet=1,  rowCount=10

第二页的话,currentPage=2, offSet=11,  rowCount=20

第三页的话,currentPage=3, offSet=21,  rowCount=30

等等


3. ROWNUM是oracle中特有的属性, 不要在mysql中使用

4. Oracle和Mysql关于like语句的写法, 若是要使用like方法:

示例定义: field_name为String类型

MyBatis+Oracle的like用法

field_name like '%'||#{field_name}||'%'

MyBatis+MySQL的like用法

field_name like concat('%',#{field_name},'%')
相关文章
相关标签/搜索