mybatis中Oracle分頁語句的寫法


最近一段時間使用oracle數據庫查詢分頁, 用的是springboot.

Oracle數據庫中沒有像mysql中limit的寫法, 只能換其他方式寫.

考慮到oracle中的ROWNUM變量, 使用它能做到分頁查詢.

看下面的mybatis的xml文件:

<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解析 < 、>、<=、>= 時會出錯,這時應該使用轉義寫法, 兩種方式

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

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

或則直接

<![CDATA[  sql語句  ]]>

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


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},'%')



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM