ibatis 分页的简单实现
ibatis 物理分页的简单实现
cheungmine 2013-8-26
使用SSI (Struts2, Spring3, iBATIS2.3)框架开发Web服务的时候有一个需求就是对查询得到的结果分页显示. iBATIS2的查询函数主要有: queryForList 和 queryForPaginatedList
queryForPaginatedList 据说可以直接分页, 以至于在数据量大了的时候, 性能急剧下降, 根本不能使用.
回到 queryForList, 如下调用可以取得queryEntities的全部数据:
List<EntityClass> entities = null;
entities = getSqlMapClientTemplate().queryForList("queryEntities", paramsMap);
如果我们需要知道记录总数, 则需要:
List<Long> rowCount = getSqlMapClientTemplate().queryForList("getRowCount", paramsMap);
我的EntityClass.xml如下:
<!-- select sql -->
<select id="queryEntities"
parameterClass="java.util.HashMap"
resultClass="EntityClass"
resultMap="EntityClassResultMapDefault">
<![CDATA[
SELECT * FROM
]]> <dynamic prepend="WHERE">
<isNotEmpty prepend="AND" property="param.itemid">
<![CDATA[
(itemid = #param.itemid:VARCHAR#)
]]>
</isNotEmpty>
<isNotEmpty prepend="AND" property="param.brandname">
<![CDATA[
(brandname like #param.brandname:VARCHAR#)
]]>
</isNotEmpty>
</dynamic>
<dynamic prepend="LIMIT">
<isNotEmpty property="limit" >
<![CDATA[
#limit:INTEGER#
]]>
</isNotEmpty>
</dynamic>
<dynamic prepend="OFFSET">
<isNotEmpty property="offset" >
<![CDATA[
#offset:INTEGER#
]]>
</isNotEmpty>
</dynamic>
</select> <select id="getRowCount"
parameterClass="java.util.HashMap"
resultClass="java.lang.Long">
<![CDATA[
SELECT COUNT(*) FROM ent_table
]]> <dynamic prepend="WHERE">
<isNotEmpty prepend="AND" property="param.itemid">
<![CDATA[
(itemid = #param.itemid:VARCHAR#)
]]>
</isNotEmpty>
<isNotEmpty prepend="AND" property="param.brandname">
<![CDATA[
(brandname like #param.brandname:VARCHAR#)
]]>
</isNotEmpty>
</dynamic>
</select>
因此代码中需要在第一次执行queryEntities之前, 先执行getRowCount以取得记录数目. 而queryEntities由于采用了SELECT * FROM table WHERE condition LIMIT m OFFSET n 语法, 会自动跳过n个结果记录(0-based), 返回不超过m条记录. 这要求数据库支持, MySQL, Sqlite 可以. 注意, OFFSET n是在返回的结果集中跳过前n个.
以上是简单的iBATIS物理分页的实现, 显然每次我们翻页的时候都要执行一次查询, 但是由于我们只取得LIMIT 条记录, 因此对服务器的内存消耗是固定的小尺寸. 这对浏览大记录集尤为有用.
ibatis 分页的简单实现的更多相关文章
- php对文本文件进行分页功能简单实现
php对文本文件进行分页功能简单实现 <!DOCTYPE> <html> <head> <meta http-equiv="Content-type ...
- Jsp分页的简单制作
Jsp分页的简单制作 运行环境:jsp+tomcat+eclipse 技术:servlet+jsp+mysql 分页技术还区分两个:假分页和真分页 假分页:一次性从数据库读出表的所有数据一次性的返回给 ...
- Spring MVC 关于分页的简单实现
据本人了解,目前较常用的分页实现办法有两种: 1.每次翻页都修改SQL,向SQL传入相关参数去数据库实时查出该页的数据并显示. 2.查出数据库某张表的全部数据,再通过在业务逻辑里面进行处理去取得某些数 ...
- ibatis分页的两种方式
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 32 33 34 35 36 3 ...
- php分页代码简单实现
版权声明:本文为博主原创文章,未经博主允许不得转载. 数据库操作类代码:mysqli.func.php <?php // 数据库连接常量 define('DB_HOST', 'localhost ...
- ScrollView图片分页显示-简单
用到的控件: 1>UIScrollView:宽度和图片的宽度一样,因为分页的代码就一句 // 设置分页,这个分页的原理实际上是按照ScrollView的宽进行分页的,这里的图片的宽由于和Scro ...
- 深入了解ibatis源码----简单ibatis示例代码
搭建源码环境: 1.创建sql数据库. CREATE TABLE USER_ACCOUNT ( USERID INT(3) NOT NULL AUTO_INCREMENT, USERNAME VARC ...
- 好用的ASP.NET 分页类 简单好用 支持 AJAX 自定义文字
在做网站没用 JS UI控件时 很实用 用法: var ps=new PageString(); /*可选参数*/ ps.SetIsEnglish = true;// 是否是英文 (默认:false) ...
- Javaweb分页功能简单实现
效果如下图 数据库中的数据 页面效果 首先,创建一个通用类Page,代码及 ...
随机推荐
- iOS学习笔记之回调(二)
写在前面 上一篇学习笔记中简单介绍了通过目标-动作对实现回调操作:创建两个对象timer和logger,将logger设置为timer的目标,timer定时调用logger的sayOuch函数.在这个 ...
- ansible服务模块和组模块使用
本篇文章主要是介绍ansible服务模块和组模块的使用. 主要模块为ansible service module和ansible group moudle,下面的内容均是通过实践得到,可以直接运行相关 ...
- Android学习之散乱的知识点
1. 安卓广告知名平台:有米,哇棒,架势,admob(国外,但效果不好)等,推荐用有米 2. src目录为源文件目录,所有可以被用户修改和创建的Java文件将被存放在这个目录下 3. xml中引用st ...
- Delphi 调用外部程序并等待其运行结束
转自:http://blog.csdn.net/xieyunc/article/details/4140620 如何让Delphi调用外部程序并等待其运行结束 1. uses Window ...
- js运动 多物体运动含Json 但是里面数值不一样
<!doctype html> <html> <head> <meta charset = "utf-8"> <title&g ...
- php 扩展apc 参数优化
编辑php.ini 输入下面 [apc] apc.enabled=1apc.shm_segments = 1apc.shm_size = 1Gapc.ttl = 0apc.user_ttl = 0ap ...
- python 使用 setup.py 方式安装及包的卸载
安装: 可通过 --home 或 --prefix 指定安装目录 --prefix=xx/xxx 选择安装目录 --record files.txt 记录所有安装文件的路径 ...
- 实体框架 (EF) 入门 => 五、连接和模型
public class BloggingContext : DbContext { public BloggingContext() : base("name=Blo ...
- Win7 SP1语言包微软官方下载地址及使用方法 2
情形一:如果您的系统版本是企业版.旗舰版,可以在Windows update中检测语言包按照提示下载安装即可.如果觉得Windows update不方便的话,可以在本文第二部分中下载所需的语言包,下载 ...
- Codeforces 711 C. Coloring Trees (dp)
题目链接:http://codeforces.com/problemset/problem/711/C 给你n棵树,m种颜色,k是指定最后的完美值.接下来一行n个数 表示1~n树原本的颜色,0的话就是 ...