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


posted on   努力做一个伪程序员  阅读(3773)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示