最近一段时间使用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 <= #{rowCount,jdbcType=INTEGER} ) WHERE RN >= #{offSet,jdbcType=INTEGER} </select>
这里主要注意下面几个问题:
1. mybatis 中 SQL 写在mapper.xml文件中,而xml解析 < 、>、<=、>= 时会出错,这时应该使用转义写法