最近在看iBatis时,想做用动态Sql做个分布。因为在做项目时用iBator工具生成没有分页的功能,只有一些我们常用的功能。所以要对生成后的代码做修改。我在Java高手真经的一书中看到有做了MySql SqlServer Oracle的分页。实现如下: 
MySql--> 
首先说说MySql的分页语句

  1. select  *  from   user   where ... order   by ... limit 10,25

    根据以上的语句我们可以对ibator生成后的代码进行修改。 
    第一修改User_sqlMap.xml 
    修改前

  1. < select   id = "ibatorgenerated_selectByExample"           resultMap = "ibatorgenerated_BaseResultMap"
  2. parameterClass = "com.demo.ibatis.beans.UserExample" > 
  3. select ID, LOGIN_NAME, PASSWORD
  4. from user
  5. < isParameterPresent > 
  6. < include   refid = "user.ibatorgenerated_Example_Where_Clause"   /> 
  7. < isNotNull   property = "orderByClause" > 
  8. order by $orderByClause$
  9. </ isNotNull > 
  10. </ isParameterPresent > 
  11. </ select > 

修改后

  1. < select   id = "ibatorgenerated_selectByExample"   resultMap = "ibatorgenerated_BaseResultMap"
  2. parameterClass = "com.demo.ibatis.beans.UserExample" > 
  3. select ID, LOGIN_NAME, PASSWORD
  4. from user
  5. < isParameterPresent > 
  6. < include   refid = "user.ibatorgenerated_Example_Where_Clause"   /> 
  7. < isNotNull   property = "orderByClause" > 
  8. order by $orderByClause$
  9. </ isNotNull > 
  10. [b] < isNotNull   property = "limitClauseStart" > 
  11. limit
  12. $limitClauseStart$,$limitClauseCount$
  13. </ isNotNull > [/b]
  14. </ isParameterPresent > 
  15. </ select > 

重要的是黑色的字体是添加到原来的xml中的。接下来修改UserExample.java 
在该类中添加两个字段和相应的getter/setter方法

  1. protected  String limitClauseStart; //起始参数
  2. protected  String limitClauseCount; //数量参数

接下来就可以通过Dao调用selectByExample()方法测试,好的以上就是MySql的分页。SqlServer的分页比较难了,因为 SqlServer中没有limit的关键字。 
看看SqlServer的分页语句,那当然 SqlServer人分布方法有很多种。这里我采用其中的一种。 
语句如下:

  1. SELECT   TOP  页大小 *
  2. FROM  TestTable
  3. WHERE  (ID  NOT   IN
  4. ( SELECT   TOP  页大小*页数 id
  5. FROM  表
  6. ORDER   BY  id))
  7. ORDER   BY  ID

接下来和上面的MySql一样也进行修改 
修改xml

  1. < select   id = "ibatorgenerated_selectByExample"   resultMap = "ibatorgenerated_BaseResultMap"
  2. parameterClass = "com.demo.ibatis.beans.UserExample" > 
  3. [b]  < isNotNull   property = "limitClauseStart" > 
  4. SELETE TOP $limitClauseCount$ * FROM user where (ID NOT IN
  5. (SELECT TOP $limitClauseStart$ ID
  6. </ isNotNull > [/b]
  7. < isNull   property = "limitClauseStart" > 
  8. SELETE *
  9. </ isNull > 
  10. FROM user
  11. from user
  12. < isParameterPresent > 
  13. < include   refid = "user.ibatorgenerated_Example_Where_Clause"   /> 
  14. < isNotNull   property = "orderByClause" > 
  15. order by $orderByClause$
  16. [b]   < isNotNull   property = "limitClauseStart" > 
  17. ))order by $orderByClause$
  18. </ isNotNull > [/b]
  19. </ isNotNull > 
  20. </ isParameterPresent > 
  21. </ select >   

    接下来是ORacle的,和上面都是差不多的这里不多说。 
    语法: 
    select* from(select rownum tid,user.* FROM (select * from user where id>1 order by ID desc)user where where rownum<35) where tid>10; 
    修改Xml,

    1. < select   id = "ibatorgenerated_selectByExample"       resultMap = "ibatorgenerated_BaseResultMap"
    2. parameterClass = "com.demo.ibatis.beans.UserExample" > 
    3. [b]  < isNotNull   property = "limitClauseStart" > 
    4. select* from(select rownum tid,user.* FROM (
    5. </ isNotNull > [/b]
    6. select * from user
    7. < isParameterPresent > 
    8. < include   refid = "user.ibatorgenerated_Example_Where_Clause"   /> 
    9. < isNotNull   property = "orderByClause" > 
    10. order by $orderByClause$
    11. </ isNotNull > 
    12. [b]   < isNotNull   property = "limitClauseStart" > 
    13. <![[CDATA )user where where rownum<$limitClauseCount$+$limitClauseStart$+1) where tid>$limitClauseStart$;]]>
    14. </ isNotNull > [/b]
    15. </ isParameterPresent > 
    16. </ select > 

ibatis 实现 物理级别的 分页 兼容多种数据库(转载)的更多相关文章

  1. SQL 横转竖 、竖专横 (转载) 使用Dapper.Contrib 开发.net core程序,兼容多种数据库 C# 读取PDF多级书签 Json.net日期格式化设置 ASPNET 下载共享文件 ASPNET 文件批量下载 递归,循环,尾递归 利用IDisposable接口构建包含非托管资源对象 《.NET 进阶指南》读书笔记2------定义不可改变类型

    SQL 横转竖 .竖专横 (转载)   普通行列转换 问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 ...

  2. 使用Dapper.Contrib 开发.net core程序,兼容多种数据库

    关于Dapper的介绍,我想很多人都对它有一定的了解,这个类似一个轻型的ORM框架是目前应用非常火的一个东西,据说各方面的性能都不错,而且可以支持多种数据库,在开始介绍这个文章之前,我花了不少功夫来学 ...

  3. Dapper.Contrib 开发.net core程序,兼容多种数据库

    Dapper.Contrib 开发.net core程序,兼容多种数据库 https://www.cnblogs.com/wuhuacong/p/9952900.html 使用Dapper.Contr ...

  4. Winform开发框架中实现同时兼容多种数据库类型处理

    在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统会部署在不同类型的数据库上,如果开发的系统能够很方便支持多种数据库的切换,那可以为我们减少很多烦恼,同时提高系统的适 ...

  5. 关于ibatis进行物理游标分页

    http://www.iteye.com/topic/136712 详细demo:参照http://www.kusoft.net 我的数据库是采用mssql2000 采用分页必定数据量比较大: 按照i ...

  6. 真正的让iframe自适应高度 兼容多种浏览器随着窗口大小改变

    今天有朋友问到我关于"iframe自适应高度"的问题,原本以为是很简单的问题,没想到折腾了20分钟才搞定.期间遇到几个问题,要么是高度自适应了,但是当窗口改变时会出现滚动条.也就是 ...

  7. jDialects:一个从Hibernate抽取的支持70多种数据库方言的原生SQL分页工具

    jDialects(https://git.oschina.net/drinkjava2/jdialects) 是一个收集了大多数已知数据库方言的Java小项目,通常可用来创建分页SQL和建表DDL语 ...

  8. 兼容多种模块规范(AMD,CMD,Node)的代码

    在JavaScript模块化开发中,为了让同一个模块可以运行在前后端,以及兼容多种模块规范(AMD,CMD,Node),类库开发者需要将类库代码包装在一个闭包内. AMD规范 AMD,即“异步模块定义 ...

  9. 自定义兼容多种Protobuf协议的编解码器

    <从零开始搭建游戏服务器>自定义兼容多种Protobuf协议的编解码器 直接在protobuf序列化数据的前面,加上一个自定义的协议头,协议头里包含序列数据的长度和对应的数据类型,在数据解 ...

随机推荐

  1. 解决sqlserver的sql脚本内存不足问题

    1.Win+R输出cmd 2.sqlcmd -i  E:\Work\xxxxx.sql -d xxxxx(数据库名称) -s 127.0.0.1

  2. bzoj 4903: [Ctsc2017]吉夫特【lucas+状压dp】

    首先根据lucas, \[ C_n^m\%2=C_{n\%2}^{m\%2}*C_{n/2}^{m/2} \] 让这个式子的结果为计数的情况只有n&m==m,因为m的每一个为1的二进制位都需要 ...

  3. P5161 WD与数列(后缀自动机+线段树合并)

    传送门 没想出来→_→ 首先不难看出要差分之后计算不相交也不相邻的相等子串对数,于是差分之后建SAM,在parent树上用线段树合并维护endpos集合,然后用启发式合并维护一个节点对另一个节点的贡献 ...

  4. ipset 学习总结

    用途:当机器受到网络攻击时,使用 iptables 封 IP,有时候可能会封禁成千上万个 IP,如果添加成千上万条规则, 在一台注重性能的服务器或者本身性能就很差的设备上就不在适用了.ipset 就是 ...

  5. python实现堆排序

    理论知识: 二叉树:度不超过2的树(节点最多有两个叉) 满二叉树:一个二叉树,如果每一个层的节点数都达到最大值,则这个二叉树就是满二叉树. 完全二叉树:叶节点只能出现在最下层和次下层,并且最下面一层的 ...

  6. Almost Acyclic Graph Codeforces - 915D

    以前做过的题都不会了.... 此题做法:优化的暴力 有一个显然的暴力:枚举每一条边试着删掉 注意到题目要求使得图无环,那么找出图上任意一个环,都应当要在其某一处断开(当然没有环是YES) 因此找出图中 ...

  7. iOS中自定义UITableViewCell的用法

    1.先创建一个View继承 UITableViewCell并使用xib快速建立模型. #import <UIKit/UIKit.h> #import "Score.h" ...

  8. c#学习系列之关键字where

    where 子句用于指定类型约束,这些约束可以作为泛型声明中定义的类型参数的变量.    1.接口约束.         例如,可以声明一个泛型类 MyGenericClass,这样,类型参数 T 就 ...

  9. html制作简单框架网页二 实现自己的影音驿站 操作步骤及源文件下载 (可播放mp4、avi、mpg、asx、swf各种文件的视频播放代码)

    新增视频播放功能如下图: 左侧网页left.html代码如下: <meta charset="utf-8"> <body style="backgrou ...

  10. vmware让虚拟机内外网络可互访

    以下方法可使主机可以ping通虚拟机,虚拟机也可以ping通主机 首先对虚拟机设置 然后设置虚拟机,假设主机的ip是10.0.0.9,那虚拟机的ip应如下设置: 其中ip地址任意设置一个,但要求跟主机 ...