最近一段時間使用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 <= #{rowCount,jdbcType=INTEGER} ) WHERE RN >= #{offSet,jdbcType=INTEGER} </select>
這裏主要注意下面幾個問題:數據庫
1. mybatis 中 SQL 寫在mapper.xml文件中,而xml解析 < 、>、<=、>= 時會出錯,這時應該使用轉義寫法, 兩種方式springboot
< | <= | > | >= | & | ' | " |
< | <= | > | >= | & | ' | " |
示例: num >= #{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},'%')