zoukankan      html  css  js  c++  java
  • 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},'%')


  • 相关阅读:
    windows下部署MySQL 8.0.11
    基于beego构建Restful API服务
    Go 并发
    Go语言的面向对象(OOP)
    Go基础语法纪要
    软件工程基础图式(第四章 系统设计-面向过程的系统设计)
    概率论与数理统计图式(第三章 多维随机变量)
    编译技术图式(第四章 语法分析)01文法和语法的定义
    计算机组成原理和结构图式(第三章 CPU子系统)
    Java图式(第三章 流程控制、数组)
  • 原文地址:https://www.cnblogs.com/xumBlog/p/11739528.html
Copyright © 2011-2022 走看看