在mybatis 采用mapping文件 中的 oracle分页 SQL 配置在一个公用mapping中供后面引入使用

1.在mybatis的公共mapping中添加下面设置

三层嵌套方式和用 row_number的方式都能到达效果,但是性能优劣众说纷纭我没亲自测试过。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="common.mapping.CommonMapper">

    <!-- ①采用rownum关键字(三层嵌套)有人说这个比下面更好 -->
    <sql id="Oracle_Pagination_Head">
        <if test="pageIndex !=null and pageSize !=null">
            <![CDATA[select y.* from(select z.*,rownum as oracleStart from (]]>
        </if>
    </sql>

    <sql id="Oracle_Pagination_Tail">
        <if test="pageIndex != null and pageSize != null">
            <![CDATA[ ) z where rownum <= (#{pageIndex}+1) * #{pageSize} ) y where y.oracleStart > #{pageIndex} * #{pageSize} ]]>
        </if>
    </sql>

    <!-- ②采用row_number解析函数进行分页(效率更高) -->
    <!-- SELECT xx.* FROM( SELECT t.*,row_number() over(ORDER BY o_id)AS num
        FROM t_order t )xx WHERE num BETWEEN 5 AND 15 -->

    <sql id="Oracle_PageRowNuber_Head">
        <if test="pageIndex !=null and pageSize !=null">
            <![CDATA[SELECT xx.* FROM( SELECT t.*,row_number() over(ORDER BY order_no)AS num FROM (]]>
        </if>
    </sql>

    <sql id="Oracle_PageRowNuber_Tail">
        <if test="pageIndex != null and pageSize != null">
            <![CDATA[ )t ) xx WHERE num BETWEEN #{pageIndex} * #{pageSize}  AND (#{pageIndex}+1)* {pageSize}]]>
        </if>
    </sql>

</mapper>

2. 后面直接引用

<select id="getListPageData" parameterType="java.util.HashMap"
        resultType="common.model.Row">
        <include
            refid="common.mapping.CommonMapper.Oracle_Pagination_Head" />
        select .........
     <include  
            refid="common.mapping.CommonMapper.Oracle_Pagination_Tail" />
</select>

原文地址:https://www.cnblogs.com/jkyxs/p/9141069.html

时间: 2024-11-10 13:10:21

在mybatis 采用mapping文件 中的 oracle分页 SQL 配置在一个公用mapping中供后面引入使用的相关文章

ORACLE分页SQL

1,使用rownum SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21 2,使用between SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A ) WHERE RN BETWEEN 21 AND 40 ORACLE分页SQL,布布扣,b

mybatis oracle分页sql

以前在写oracle分页时的sql是: (1) select *     from  (select a.*, rownum rnum      from (select id, data      from t  order by id, rowid) a     )    where rnum >= 148 and rnum<=151; 或者 (2) select *     from  (select a.*, rownum rnum      from (select id, data

oracle用sql 语句如何向表中插入时间?

有关日期的操作中,更多的是涉及系统当前时间,用sysdate表示即可,如果是插入其他非系统时间的日期类型数据的话,用to_date转换再插入就可以了.例: 1 insert into 表(c_date) values(to_date('20120927 20:09:47','YYYYMMDD HH24:MI:SS')); 另外:有些日期字段中会有一些默认数据,所以to_date还是挺有用的.如: 1 startdate date DEFAULT to_date('2000-01-01','yyy

初学oracle,sql,DML向表中插入某个值

SQL> conn scott/tigerConnected.SQL> show user;USER is "SCOTT"SQL> create table qq(name varchar2(10),salary number(8,2)); 创建一个表qq,两个段,名字和工资Table created.SQL> select * from qq;  查询表qq的信息no rows selectedSQL> insert into qq(name) valu

ORACLE 分页SQL

这个sql的分页很简单,但是由于十分常用,且通常用于查询大量数据的情况. SELECT * FROM( SELECT A.*,ROWNUM RN FROM (SELECT * FROM TABLE_XX ) A WHERE ROWNUM<=20 )  TL WHERE RN >=11 这个sql高效的原因在于优化模式下, Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率. 故此查询中,查询条件WHERE ROWNUM<=20就可以被Oracle推入到内层查询中,

SQL笔记----在一个关系表中操作列

使用alter关键字,可以为一个表添加新的列. 比如: 给Persons的表中添加一列,名字为Birthday,类型是date. ALTER TABLE Persons ADD Birthday date 使用alter的格式为: ALTER TABLE table_name ADD column_name datatype 在一个表中删除一列的操作为: ALTER TABLE table_name DROP COLUMN column_name 改变列的属性: ALTER TABLE tabl

ORACLE分页SQL语句三种分页技术

1.根据ROWID来分select * from t_xiaoxi where rowid in(select rid from (select rownum rn,rid from(select rowid rid,cid from t_xiaoxi  order by cid desc) where rownum<10000) where rn>9980) order by cid desc;执行时间0.03秒 2.按分析函数来分select * from (select t.*,row_

oracle分页sql语句

select * from(select a1.*, rownum.rn from(select *from emp) a1 where rownum<=10) where rn>=6; select * from(select a1.*, rownum.rn from(select *from emp) a1 where rownum<=10) where rn>=6;

ORACLE分页SQL语句(转载)

1.根据ROWID来分select * from t_xiaoxi where rowid in(select rid from (select rownum rn,rid from(select rowid rid,cid from t_xiaoxi  order by cid desc) where rownum<10000) where rn>9980) order by cid desc;执行时间0.03秒2.按分析函数来分select * from (select t.*,row_n