IBatis.Net使用总结(三)-- IBatis实现分页返回数据和总数
IBatis 分页,这里没有使用其他插件,只使用最原始的方法。
输入参数:
int currentPage 当前页
int pageSize 每页大小
Hashtable findCondition 查询条件
out int total 返回总数
输出:
DataTable 或者 IList<T>
使用了三种分页方式,根据实际情况使用。
我在实际应用中,
第一种返回DataTable,在使用过程中,需要注意它所映射的实体对象名称字段。
第二种方法返回泛型集合,使用的比较顺手,也是习惯使用的方法。
第三种方法也是返回泛型集合。但是,它使用的两个参数,偏移量和页面大小,我平常用的概率小点。
1:在一个statements中,使用了两条语句,一个是返回所需的列,一个是返回总数。。
<select id="Article_FindPageByCond" parameterClass="HashTable" resultClass="System.Data.DataSet" > <![CDATA[select T.[PK_Article] ,T.[ArticleTitle] ,T.[ArticleAuthor] ,T.[ArticleSummary] ,T.[ArticleContent] ,T.[Sort] ,T.[EditTime] ,T.[Dr] ,T.[Ts] from ( select A.*, ROW_NUMBER() OVER ( ORDER BY (A.[PK_Article] ) ) rn from (select * from [dbo].[Article]]]> <dynamic prepend="WHERE"> <isNotEmpty prepend="and" property="PKArticle"> PKArticle LIKE '%'+#PKArticle#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleTitle"> ArticleTitle LIKE '%'+#ArticleTitle#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleAuthor"> ArticleAuthor LIKE '%'+#ArticleAuthor#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleSummary"> ArticleSummary LIKE '%'+#ArticleSummary#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleContent"> ArticleContent LIKE '%'+#ArticleContent#+'%' </isNotEmpty> <isNotNull property="Sort"> <isNotEmpty property="Sort"> <isNotEqual prepend="and" property="Sort" compareValue="0"> Sort LIKE '%'+#Sort#+'%' </isNotEqual> </isNotEmpty> </isNotNull> <isNotEmpty prepend="and" property="EditTime"> EditTime LIKE '%'+#EditTime#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="Dr"> Dr LIKE '%'+#Dr#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="Ts"> Ts LIKE '%'+#Ts#+'%' </isNotEmpty> </dynamic> ) A ) T where 1=1 and <![CDATA[ rn <= #currentPage# * #pageSize# ]]> and <![CDATA[ rn >(#currentPage# - 1) * #pageSize# ]]> <![CDATA[ select count(*) as total from ( select A.*, ROW_NUMBER() OVER ( ORDER BY (A.[PK_Article] ) ) rn from (select * from [dbo].[Article]]]> <dynamic prepend="WHERE"> <isNotEmpty prepend="and" property="PKArticle"> PKArticle LIKE '%'+#PKArticle#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleTitle"> ArticleTitle LIKE '%'+#ArticleTitle#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleAuthor"> ArticleAuthor LIKE '%'+#ArticleAuthor#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleSummary"> ArticleSummary LIKE '%'+#ArticleSummary#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleContent"> ArticleContent LIKE '%'+#ArticleContent#+'%' </isNotEmpty> <isNotNull property="Sort"> <isNotEmpty property="Sort"> <isNotEqual prepend="and" property="Sort" compareValue="0"> Sort LIKE '%'+#Sort#+'%' </isNotEqual> </isNotEmpty> </isNotNull> <isNotEmpty prepend="and" property="EditTime"> EditTime LIKE '%'+#EditTime#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="Dr"> Dr LIKE '%'+#Dr#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="Ts"> Ts LIKE '%'+#Ts#+'%' </isNotEmpty> </dynamic> ) A ) T </select>
返回所需列,返回总数
这种方式,调用前面所说的返回DataTable的方法,完成分页
/// <summary> /// 按条件获取分页数据,返回DataTable对象 /// </summary> /// <param name="currentPage"></param> /// <param name="pageSize"></param> /// <param name="findCondtion"></param> /// <param name="total"></param> /// <returns></returns> public DataTable FindPageByCondition(int currentPage, int pageSize, Hashtable findCondition, out int total) { String stmtId = "Article_FindPageByCond"; total = ; findCondition.Add("currentPage", currentPage); findCondition.Add("pageSize", pageSize); BaseDao bd = new BaseDao(); DataSet ds = bd.QueryForDataSet(stmtId, findCondition); DataTable dt = ds.Tables[]; total = Convert.ToInt32(ds.Tables[].Rows[][].ToString()); return dt; }
使用BaseDao.cs返回分页之后的DataTable
2:如果想要返回泛型集合IList<T>,则使用两个statements。一个select返回实体映射,一个select返回总数。
<select id="Article_GetPageByCond" parameterClass="HashTable" resultMap="FullResultMap" > <![CDATA[select T.[PK_Article] ,T.[ArticleTitle] ,T.[ArticleAuthor] ,T.[ArticleSummary] ,T.[ArticleContent] ,T.[Sort] ,T.[EditTime] ,T.[Dr] ,T.[Ts] from ( select A.*, ROW_NUMBER() OVER ( ORDER BY (A.[PK_Article] ) ) rn from (select * from [dbo].[Article]]]> <dynamic prepend="WHERE"> <isNotEmpty prepend="and" property="PKArticle"> PKArticle LIKE '%'+#PKArticle#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleTitle"> ArticleTitle LIKE '%'+#ArticleTitle#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleAuthor"> ArticleAuthor LIKE '%'+#ArticleAuthor#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleSummary"> ArticleSummary LIKE '%'+#ArticleSummary#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleContent"> ArticleContent LIKE '%'+#ArticleContent#+'%' </isNotEmpty> <isNotNull property="Sort"> <isNotEmpty property="Sort"> <isNotEqual prepend="and" property="Sort" compareValue="0"> Sort LIKE '%'+#Sort#+'%' </isNotEqual> </isNotEmpty> </isNotNull> <isNotEmpty prepend="and" property="EditTime"> EditTime LIKE '%'+#EditTime#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="Dr"> Dr LIKE '%'+#Dr#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="Ts"> Ts LIKE '%'+#Ts#+'%' </isNotEmpty> </dynamic> ) A ) T where 1=1 and <![CDATA[ rn <= #currentPage# * #pageSize# ]]> and <![CDATA[ rn >(#currentPage# - 1) * #pageSize# ]]> </select>
返回映射FullResultMap
<select id="Article_GetCountByCond" resultClass="System.Int32"> <![CDATA[ SELECT count(*) as total FROM ( select A.*, ROW_NUMBER() OVER ( ORDER BY (A.[PK_Article] ) ) rn from (SELECT * FROM [dbo].[Article]]]> <dynamic prepend="WHERE"> <isNotEmpty prepend="and" property="PKArticle"> PKArticle LIKE '%'+#PKArticle#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleTitle"> ArticleTitle LIKE '%'+#ArticleTitle#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleAuthor"> ArticleAuthor LIKE '%'+#ArticleAuthor#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleSummary"> ArticleSummary LIKE '%'+#ArticleSummary#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="ArticleContent"> ArticleContent LIKE '%'+#ArticleContent#+'%' </isNotEmpty> <isNotNull property="Sort"> <isNotEmpty property="Sort"> <isNotEqual prepend="and" property="Sort" compareValue="0"> Sort LIKE '%'+#Sort#+'%' </isNotEqual> </isNotEmpty> </isNotNull> <isNotEmpty prepend="and" property="EditTime"> EditTime LIKE '%'+#EditTime#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="Dr"> Dr LIKE '%'+#Dr#+'%' </isNotEmpty> <isNotEmpty prepend="and" property="Ts"> Ts LIKE '%'+#Ts#+'%' </isNotEmpty> </dynamic> ) A ) T </select>
返回总数
使用IList<T> QueryForList<T>(string statementName, object parameterObject);
/// <summary> /// 按条件获取分页数据,返回IList对象 /// </summary> /// <param name="currentPage"></param> /// <param name="pageSize"></param> /// <param name="findCondtion"></param> /// <param name="total"></param> /// <returns></returns> public IList<Article> GetPageByCondition(int currentPage, int pageSize, Hashtable findCondition) { IList<Article> list=new List<Article>(); String stmtId = "Article_GetPageByCond"; findCondition.Add("currentPage", currentPage); findCondition.Add("pageSize", pageSize); IList<Article> result = SqlMap.QueryForList<Article>(stmtId,findCondition); return result; }
分页返回IList对象
3:使用ibatis.net本身自带的分页功能。
int skipResults 偏移量
int maxResults 每页大小(偏移量之后的页面大小)
statements还是使用了第2种方法,两个statements
IList<T> QueryForList<T>(string statementName, object parameterObject, int skipResults, int maxResults);
IList QueryForList(string statementName, object parameterObject, int skipResults, int maxResults);
public IList GetPage(int skipResults, int maxResults, Hashtable findCondition) { String stmtId = "Article_GetPageByCond"; IList result = SqlMap.QueryForList(stmtId, findCondition, skipResults, maxResults); return result; }
使用自带的分页功能
IBatis.Net使用总结(三)-- IBatis实现分页返回数据和总数的更多相关文章
- sql 排序函数ROW_NUMBER分页返回数据
分页从数据库返回一张表的某些条数据 假设我需要查询 系统表 sys.all_columns中的数据,每次查询10条 第一次查询第1-10条数据 第二次查询第11-20条数据 第三次查询第21-30条数 ...
- easyui-datagrid连接数据库实现分页查询数据
一.利用MVC思想建立底层数据库: package com.hanqi.dao; import java.util.ArrayList; import java.util.List; import o ...
- MySQL+Service+Servlet+Jsp实现Table表格分页展示数据
下面以一个示例讲解如何使用MySQL+Service+Servlet+Jsp实现Table表格分页展示数据: eg:请假管理系统 要求如下: 一.打开首页页面, 访问查询请假记录的 servlet , ...
- tp5 使用paginate分页获取数据对象之后 如何对对象进行数据添加
tp5 使用paginate分页获取数据对象之后 如何对对象进行数据添加 大家都知道,在使用tp5的paginate获取分页数据之后,得到的是一个数据对象,但有时会碰到要对数据对象进行二次加工的情况, ...
- ASP.NET(五):ASP.net实现真分页显示数据
导读:在上篇文章中,介绍了用假分页实现数据的分页显示 ,而避免了去拖动滚动条.但,假分页在分页的同时,其实是拖垮了查询效率的.每一次分页都得重新查询一遍数据,那么有没有方法可以同时兼顾效率和分页呢,那 ...
- Oracle数据库排序后分页查询数据错误问题解决
一.问题描述:根据更新时间倒序排序然后分页查询数据,但是点击分页操作的时候,会出现数据重复看似没有操作的情况 二.问题错误原因分析 分页查询的SQL语句: select * FROM (select ...
- SqlServer存储过程应用二:分页查询数据并动态拼接where条件
前言 开发中查询功能是贯穿全文的,我们来盘一盘使用存储过程分页查询,并且支持动态拼接where条件. 划重点:支持动态拼接where条件 对存储过程的使用有疑问的同学去[SqlServer存储过程的创 ...
- Activity详解三 启动activity并返回结果
首先看演示: 1 简介 .如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int ...
- android中listview分页载入数据
前段时间做的新浪微博项目一直想实现listview分页载入数据,今天最终实现了,哈哈!感觉挺好的,今天又写了个demo给大家分享下. 首先说下listview的优化方案,这也是面试中常考的题目.优化方 ...
随机推荐
- Ubuntu(基于Ubuntu)中常用的apt和dpkt命令
apt-get sudo apt-get install package 安装包 sudo apt-get -f install 修复安装”-f = ——fix-missing” sudo a ...
- [noip科普]关于LIS和一类可以用树状数组优化的DP
预备知识 DP(Dynamic Programming):一种以无后效性的状态转移为基础的算法,我们可以将其不严谨地先理解为递推.例如斐波那契数列的递推求法可以不严谨地认为是DP.当然DP的状态也可以 ...
- 基于Arduino、STM32进行红外遥控信号接收
catalogue . 遥控器原理简介 . 红外遥控原理 . 常见红外遥控器红外线信号传输协议 . 遙控器的发展 . 实验过程 . 攻击面 . 基于STM32实现红外信号解码 1. 遥控器原理简介 0 ...
- windows下 nvm下载node被墙了解决办法
不需要这么麻烦的,在1.1.1版本中,确实没有实现命令行设置.这点你分析的很对,但是从配置文件中读取镜像地址已经完成,所以直接在settings.txt中手工设置一下就好了,无需编译.以下是我的文件位 ...
- python取mysql数据写入excel
环境:MySQLdb openpyxl模块 python去zabbix的mysql数据库中取交换机不同时间段的进出口流量,然后写入excel中,每天cron执行,每周四邮件发送.(代码中第一行必须加上 ...
- elasticsearch snapshot
一.Repositories 在elasticsearch.yml文件中增加path.repo路径配置: $ vim /etc/elasticsearch/elasticsearch.yml path ...
- C++11特性:decltype关键字
decltype简介 我们之前使用的typeid运算符来查询一个变量的类型,这种类型查询在运行时进行.RTTI机制为每一个类型产生一个type_info类型的数据,而typeid查询返回的变量相应ty ...
- maven project中,在main方法上右键Run as Java Application时,提示错误:找不到或无法加载主类XXX.XXXX.XXX
新建了一个maven project项目,经过一大堆的修改操作之后,突然发现在main方法上右键运行时,竟然提示:错误:找不到或无法加载主类xxx.xxx.xxx可能原因1.eclipse出问题了,在 ...
- [NHibernate]事务
目录 写在前面 文档与系列文章 事务 增删改查 总结 写在前面 上篇文章介绍了nhibernate的增删改查方法及增加修改操作,这篇文章将介绍nhibernate的事务操作. SQL Server中的 ...
- 【09-03】java泛型学习笔记
静态方法的泛型 /** * @description 静态方法的泛型无法使用类定义的泛型,因为类在实例化时才确定具体的泛型类,因此静态方法要使用泛型需要使用泛型方法的方式 */ public clas ...