ibatis 实现 物理级别的 分页 兼容多种数据库(转载)
最近在看iBatis时,想做用动态Sql做个分布。因为在做项目时用iBator工具生成没有分页的功能,只有一些我们常用的功能。所以要对生成后的代码做修改。我在Java高手真经的一书中看到有做了MySql SqlServer Oracle的分页。实现如下:
MySql-->
首先说说MySql的分页语句
- select * from user where ... order by ... limit 10,25
根据以上的语句我们可以对ibator生成后的代码进行修改。
第一修改User_sqlMap.xml
修改前
- < select id = "ibatorgenerated_selectByExample" resultMap = "ibatorgenerated_BaseResultMap"
- parameterClass = "com.demo.ibatis.beans.UserExample" >
- select ID, LOGIN_NAME, PASSWORD
- from user
- < isParameterPresent >
- < include refid = "user.ibatorgenerated_Example_Where_Clause" />
- < isNotNull property = "orderByClause" >
- order by $orderByClause$
- </ isNotNull >
- </ isParameterPresent >
- </ select >
修改后
- < select id = "ibatorgenerated_selectByExample" resultMap = "ibatorgenerated_BaseResultMap"
- parameterClass = "com.demo.ibatis.beans.UserExample" >
- select ID, LOGIN_NAME, PASSWORD
- from user
- < isParameterPresent >
- < include refid = "user.ibatorgenerated_Example_Where_Clause" />
- < isNotNull property = "orderByClause" >
- order by $orderByClause$
- </ isNotNull >
- [b] < isNotNull property = "limitClauseStart" >
- limit
- $limitClauseStart$,$limitClauseCount$
- </ isNotNull > [/b]
- </ isParameterPresent >
- </ select >
重要的是黑色的字体是添加到原来的xml中的。接下来修改UserExample.java
在该类中添加两个字段和相应的getter/setter方法
- protected String limitClauseStart; //起始参数
- protected String limitClauseCount; //数量参数
接下来就可以通过Dao调用selectByExample()方法测试,好的以上就是MySql的分页。SqlServer的分页比较难了,因为 SqlServer中没有limit的关键字。
看看SqlServer的分页语句,那当然 SqlServer人分布方法有很多种。这里我采用其中的一种。
语句如下:
- SELECT TOP 页大小 *
- FROM TestTable
- WHERE (ID NOT IN
- ( SELECT TOP 页大小*页数 id
- FROM 表
- ORDER BY id))
- ORDER BY ID
接下来和上面的MySql一样也进行修改
修改xml
- < select id = "ibatorgenerated_selectByExample" resultMap = "ibatorgenerated_BaseResultMap"
- parameterClass = "com.demo.ibatis.beans.UserExample" >
- [b] < isNotNull property = "limitClauseStart" >
- SELETE TOP $limitClauseCount$ * FROM user where (ID NOT IN
- (SELECT TOP $limitClauseStart$ ID
- </ isNotNull > [/b]
- < isNull property = "limitClauseStart" >
- SELETE *
- </ isNull >
- FROM user
- from user
- < isParameterPresent >
- < include refid = "user.ibatorgenerated_Example_Where_Clause" />
- < isNotNull property = "orderByClause" >
- order by $orderByClause$
- [b] < isNotNull property = "limitClauseStart" >
- ))order by $orderByClause$
- </ isNotNull > [/b]
- </ isNotNull >
- </ isParameterPresent >
- </ 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,
- < select id = "ibatorgenerated_selectByExample" resultMap = "ibatorgenerated_BaseResultMap"
- parameterClass = "com.demo.ibatis.beans.UserExample" >
- [b] < isNotNull property = "limitClauseStart" >
- select* from(select rownum tid,user.* FROM (
- </ isNotNull > [/b]
- select * from user
- < isParameterPresent >
- < include refid = "user.ibatorgenerated_Example_Where_Clause" />
- < isNotNull property = "orderByClause" >
- order by $orderByClause$
- </ isNotNull >
- [b] < isNotNull property = "limitClauseStart" >
- <![[CDATA )user where where rownum<$limitClauseCount$+$limitClauseStart$+1) where tid>$limitClauseStart$;]]>
- </ isNotNull > [/b]
- </ isParameterPresent >
- </ select >
ibatis 实现 物理级别的 分页 兼容多种数据库(转载)的更多相关文章
- SQL 横转竖 、竖专横 (转载) 使用Dapper.Contrib 开发.net core程序,兼容多种数据库 C# 读取PDF多级书签 Json.net日期格式化设置 ASPNET 下载共享文件 ASPNET 文件批量下载 递归,循环,尾递归 利用IDisposable接口构建包含非托管资源对象 《.NET 进阶指南》读书笔记2------定义不可改变类型
SQL 横转竖 .竖专横 (转载) 普通行列转换 问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 ...
- 使用Dapper.Contrib 开发.net core程序,兼容多种数据库
关于Dapper的介绍,我想很多人都对它有一定的了解,这个类似一个轻型的ORM框架是目前应用非常火的一个东西,据说各方面的性能都不错,而且可以支持多种数据库,在开始介绍这个文章之前,我花了不少功夫来学 ...
- Dapper.Contrib 开发.net core程序,兼容多种数据库
Dapper.Contrib 开发.net core程序,兼容多种数据库 https://www.cnblogs.com/wuhuacong/p/9952900.html 使用Dapper.Contr ...
- Winform开发框架中实现同时兼容多种数据库类型处理
在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统会部署在不同类型的数据库上,如果开发的系统能够很方便支持多种数据库的切换,那可以为我们减少很多烦恼,同时提高系统的适 ...
- 关于ibatis进行物理游标分页
http://www.iteye.com/topic/136712 详细demo:参照http://www.kusoft.net 我的数据库是采用mssql2000 采用分页必定数据量比较大: 按照i ...
- 真正的让iframe自适应高度 兼容多种浏览器随着窗口大小改变
今天有朋友问到我关于"iframe自适应高度"的问题,原本以为是很简单的问题,没想到折腾了20分钟才搞定.期间遇到几个问题,要么是高度自适应了,但是当窗口改变时会出现滚动条.也就是 ...
- jDialects:一个从Hibernate抽取的支持70多种数据库方言的原生SQL分页工具
jDialects(https://git.oschina.net/drinkjava2/jdialects) 是一个收集了大多数已知数据库方言的Java小项目,通常可用来创建分页SQL和建表DDL语 ...
- 兼容多种模块规范(AMD,CMD,Node)的代码
在JavaScript模块化开发中,为了让同一个模块可以运行在前后端,以及兼容多种模块规范(AMD,CMD,Node),类库开发者需要将类库代码包装在一个闭包内. AMD规范 AMD,即“异步模块定义 ...
- 自定义兼容多种Protobuf协议的编解码器
<从零开始搭建游戏服务器>自定义兼容多种Protobuf协议的编解码器 直接在protobuf序列化数据的前面,加上一个自定义的协议头,协议头里包含序列数据的长度和对应的数据类型,在数据解 ...
随机推荐
- UVaLive 7456 Least Crucial Node (并查集+暴力 或者 求割点)
题意:求标号最小的最大割点.(删除该点后,指定点#sink能到达的点数减少最多). 析:由于不知道要去掉哪个结点,又因为只有100个结点,所以我们考虑用一个暴力,把所有的结点都去一次,然后用并查集去判 ...
- 20170407-ms
invoke v调用 dismiss v解雇 exclusive adj. 专用的; 高级的; 排外的; 单独的; n. 独家新闻; 专有物; 独家经营的产品(或项目.设计等); 排外者; ex ...
- 洛谷 - P1433 - 吃奶酪 - dfs
https://www.luogu.org/problemnew/show/P1433 并不是每一个求最短距离就是bfs,这个肯定是dfs. 直接计算15!可以知道枚举必定超时,但是! 我们dfs非常 ...
- 二分图最大匹配初探 By cellur925
一.什么是二分图 首先它需要是一张无向图. 之后它需要同时满足两个条件:①它的N个点被分为两个集合,且这两个集合交集为空:②同一集合内的点之间没有边相连. 二.无向图是否为二分图的判定 引理:无向图是 ...
- 关于asp.net网址出现乱码问题的解决方法
背景: asp.net项目,C#,VS2010,.netframework 4.0 创建之初,没有任何问题,随着项目文件的增多,不免很多问题会出现, 最近就莫名其妙的发现我的项目网址多了一段乱码,很是 ...
- CSS常见的五大布局
本文概要 本文将介绍如下几种常见的布局: 一.单列布局 常见的单列布局有两种: header,content 和 footer 等宽的单列布局 header 与 footer 等宽,content 略 ...
- 最小公倍数的最小和(Minimum Sum LCM )
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> u ...
- C++ 操作符重载 (operator)
重载不能改变操作符的优先级 如果一个内建操作符是一元的,那么所有对它的重载仍是一元的.如果是二元的重载后也是二元的 下面看一个有代表性的例子:: 头文件Complex.h: #includeusing ...
- JMeter配置JDBC测试SQL Server/MySQL
一.配置SQL Server 1.下载sql驱动,将sqljdbc4.jar放到JMeter安装目录/lib下. 2.启动JMeter,右键添加->配置文件->JDBC Connectio ...
- [洛谷P2417]课程
题目链接: 点我 题目分析: 二分图最大匹配裸题,跑完匈牙利判断\(ans\)是否等于教室数即可 多组数据请注意初始化. 代码: #include<bits/stdc++.h> #defi ...