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实现分页返回数据和总数的更多相关文章

  1. sql 排序函数ROW_NUMBER分页返回数据

    分页从数据库返回一张表的某些条数据 假设我需要查询 系统表 sys.all_columns中的数据,每次查询10条 第一次查询第1-10条数据 第二次查询第11-20条数据 第三次查询第21-30条数 ...

  2. easyui-datagrid连接数据库实现分页查询数据

    一.利用MVC思想建立底层数据库: package com.hanqi.dao; import java.util.ArrayList; import java.util.List; import o ...

  3. MySQL+Service+Servlet+Jsp实现Table表格分页展示数据

    下面以一个示例讲解如何使用MySQL+Service+Servlet+Jsp实现Table表格分页展示数据: eg:请假管理系统 要求如下: 一.打开首页页面, 访问查询请假记录的 servlet , ...

  4. tp5 使用paginate分页获取数据对象之后 如何对对象进行数据添加

    tp5 使用paginate分页获取数据对象之后 如何对对象进行数据添加 大家都知道,在使用tp5的paginate获取分页数据之后,得到的是一个数据对象,但有时会碰到要对数据对象进行二次加工的情况, ...

  5. ASP.NET(五):ASP.net实现真分页显示数据

    导读:在上篇文章中,介绍了用假分页实现数据的分页显示 ,而避免了去拖动滚动条.但,假分页在分页的同时,其实是拖垮了查询效率的.每一次分页都得重新查询一遍数据,那么有没有方法可以同时兼顾效率和分页呢,那 ...

  6. Oracle数据库排序后分页查询数据错误问题解决

    一.问题描述:根据更新时间倒序排序然后分页查询数据,但是点击分页操作的时候,会出现数据重复看似没有操作的情况 二.问题错误原因分析 分页查询的SQL语句: select * FROM (select ...

  7. SqlServer存储过程应用二:分页查询数据并动态拼接where条件

    前言 开发中查询功能是贯穿全文的,我们来盘一盘使用存储过程分页查询,并且支持动态拼接where条件. 划重点:支持动态拼接where条件 对存储过程的使用有疑问的同学去[SqlServer存储过程的创 ...

  8. Activity详解三 启动activity并返回结果

    首先看演示: 1 简介 .如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int ...

  9. android中listview分页载入数据

    前段时间做的新浪微博项目一直想实现listview分页载入数据,今天最终实现了,哈哈!感觉挺好的,今天又写了个demo给大家分享下. 首先说下listview的优化方案,这也是面试中常考的题目.优化方 ...

随机推荐

  1. 如何修复Ubuntu 14.04 系统设置丢失的问题

    其实遇到这个问题的一个最主要的原因是之前执行过卸载ibus输入法的操作,所以为了避免这个问题请不要卸载ibus输入法,大家依然可以安装fcitx输入法使用. 如果已经出现了这个问题,那该怎么解决呢?很 ...

  2. 搭建maven项目

    一.新建项目 点击"Maven Project",如果没有的话在"Other"里面 勾选这个选项,这样可以建立一个没有多余文件的简单项目(如果这个时候直接建立w ...

  3. CSS DIV自动适应高度

    当div需要设定自适应高度时,可用到的css属性,min-height:200px;代表的是当div的内容超出了200px时,就会自动适应高度,兼容所有浏览器(IE6除外),如果是IE6则需要设置&q ...

  4. Windows综合应用

    待修改中-------------------------------------- 快捷键部分: Win+E:打开"我的电脑"E:Explot的缩写,即资源管理器. ------ ...

  5. Linux下长时间ping网络加时间戳并记录到文本

    Linux下长时间ping网络加时间戳并记录到文本   由于一些原因,比如需要检查网络之间是否存在掉包等问题,会长时间去ping一个地址,由于会输出大量的信息而且最好要有时间戳,因此我们可以使用简单的 ...

  6. 20145212&20145204信息安全系统实验五

    一.实验步骤 1.阅读理解源码 进入/arm2410cl/exp/basic/07_httpd目录,使用 vim编辑器或其他编辑器阅读理解源代码. 2.编译应用程序 运行 make 产生可执行文件 h ...

  7. TypeError: 'bool' object is not callable g.user.is_authenticated()

    此问题查了stackoverflow后知道is_authenticated是一个属性而不是一个方法所以g.user.is_authenticated() 用法会报错

  8. CSS知识回顾--读《CSS 那些事儿》笔记

    由于之前有了解过CSS的相关知识,有了一定的基础,所以读起<CSS 那些事儿>不是很有难度,况且我现在读起来时,CSS3和HTML5比较流行,这里只是记录一些CSS知识记录,不做详细铺开, ...

  9. UITableView的添加、删除、移动操作

    #pragma mark -----表视图的移动操作----- //移动的第一步也是需要将表视图的编辑状态打开 //2.指定哪些行可以进行移动 - (BOOL)tableView:(UITableVi ...

  10. mysql 存储过程在批处理数据中的应用

    最近批处理数据的时候,突然想到:为什么不使用存储过程进行数据批处理? 为什么要进行批处理? 自答:减少数据库连接次数,提高效率. 存储过程批处理数据的优点:一次编译,永久执行. 这次的批处理逻辑较简单 ...