zoukankan      html  css  js  c++  java
  • IBatis.Net使用总结(三)-- IBatis实现分页返回数据和总数

    IBatis 分页,这里没有使用其他插件,只使用最原始的方法。

    输入参数:

    int   currentPage  当前页

    int   pageSize  每页大小

    Hashtable   findCondition  查询条件

    out  int   total  返回总数

    输出:  

    DataTable  或者  IList<T>

    使用了三种分页方式,根据实际情况使用。

    我在实际应用中,

    第一种返回DataTable,在使用过程中,需要注意它所映射的实体对象名称字段。

    第二种方法返回泛型集合,使用的比较顺手,也是习惯使用的方法。

    第三种方法也是返回泛型集合。但是,它使用的两个参数,偏移量和页面大小,我平常用的概率小点。

    1:在一个statements中,使用了两条语句,一个是返回所需的列,一个是返回总数。。

      1 <select id="Article_FindPageByCond" parameterClass="HashTable" resultClass="System.Data.DataSet" >
      2       <![CDATA[select           
      3                 T.[PK_Article]
      4                 ,T.[ArticleTitle]
      5                 ,T.[ArticleAuthor]
      6                 ,T.[ArticleSummary]
      7                 ,T.[ArticleContent]
      8                 ,T.[Sort]
      9                 ,T.[EditTime]
     10                 ,T.[Dr]
     11                 ,T.[Ts]
     12           from
     13           ( select A.*, ROW_NUMBER() OVER ( ORDER BY 
     14                  (A.[PK_Article] )
     15                   ) rn
     16               from
     17               (select *  from [dbo].[Article]]]>
     18                   <dynamic prepend="WHERE">
     19                     <isNotEmpty prepend="and" property="PKArticle">
     20                         PKArticle LIKE '%'+#PKArticle#+'%'
     21                     </isNotEmpty>
     22                     <isNotEmpty prepend="and" property="ArticleTitle">
     23                         ArticleTitle LIKE '%'+#ArticleTitle#+'%'
     24                     </isNotEmpty>
     25                     <isNotEmpty prepend="and" property="ArticleAuthor">
     26                         ArticleAuthor LIKE '%'+#ArticleAuthor#+'%'
     27                     </isNotEmpty>
     28                     <isNotEmpty prepend="and" property="ArticleSummary">
     29                         ArticleSummary LIKE '%'+#ArticleSummary#+'%'
     30                     </isNotEmpty>
     31                     <isNotEmpty prepend="and" property="ArticleContent">
     32                         ArticleContent LIKE '%'+#ArticleContent#+'%'
     33                     </isNotEmpty>
     34                     <isNotNull property="Sort">
     35                         <isNotEmpty property="Sort">
     36                             <isNotEqual prepend="and" property="Sort" compareValue="0">
     37                                 Sort LIKE '%'+#Sort#+'%'
     38                             </isNotEqual>
     39                         </isNotEmpty>
     40                     </isNotNull>
     41                     <isNotEmpty prepend="and" property="EditTime">
     42                         EditTime LIKE '%'+#EditTime#+'%'
     43                     </isNotEmpty>
     44                     <isNotEmpty prepend="and" property="Dr">
     45                         Dr LIKE '%'+#Dr#+'%'
     46                     </isNotEmpty>
     47                     <isNotEmpty prepend="and" property="Ts">
     48                         Ts LIKE '%'+#Ts#+'%'
     49                     </isNotEmpty>
     50                 </dynamic>
     51               ) A
     52           ) T
     53           where 1=1 and
     54           <![CDATA[  rn <= #currentPage# * #pageSize# ]]>
     55           and  <![CDATA[ rn >(#currentPage# - 1) * #pageSize# ]]>
     56           
     57           <![CDATA[      
     58            select count(*) as total
     59           from
     60           ( select A.*, ROW_NUMBER() OVER ( ORDER BY 
     61                  (A.[PK_Article] )
     62                   ) rn
     63               from
     64               (select *  from [dbo].[Article]]]>
     65                   <dynamic prepend="WHERE">
     66                     <isNotEmpty prepend="and" property="PKArticle">
     67                         PKArticle LIKE '%'+#PKArticle#+'%'
     68                     </isNotEmpty>
     69                     <isNotEmpty prepend="and" property="ArticleTitle">
     70                         ArticleTitle LIKE '%'+#ArticleTitle#+'%'
     71                     </isNotEmpty>
     72                     <isNotEmpty prepend="and" property="ArticleAuthor">
     73                         ArticleAuthor LIKE '%'+#ArticleAuthor#+'%'
     74                     </isNotEmpty>
     75                     <isNotEmpty prepend="and" property="ArticleSummary">
     76                         ArticleSummary LIKE '%'+#ArticleSummary#+'%'
     77                     </isNotEmpty>
     78                     <isNotEmpty prepend="and" property="ArticleContent">
     79                         ArticleContent LIKE '%'+#ArticleContent#+'%'
     80                     </isNotEmpty>
     81                     <isNotNull property="Sort">
     82                         <isNotEmpty property="Sort">
     83                             <isNotEqual prepend="and" property="Sort" compareValue="0">
     84                                 Sort LIKE '%'+#Sort#+'%'
     85                             </isNotEqual>
     86                         </isNotEmpty>
     87                     </isNotNull>
     88                     <isNotEmpty prepend="and" property="EditTime">
     89                         EditTime LIKE '%'+#EditTime#+'%'
     90                     </isNotEmpty>
     91                     <isNotEmpty prepend="and" property="Dr">
     92                         Dr LIKE '%'+#Dr#+'%'
     93                     </isNotEmpty>
     94                     <isNotEmpty prepend="and" property="Ts">
     95                         Ts LIKE '%'+#Ts#+'%'
     96                     </isNotEmpty>
     97                 </dynamic>
     98               ) A
     99           ) T         
    100     </select>
    返回所需列,返回总数

     这种方式,调用前面所说的返回DataTable的方法,完成分页

     1        /// <summary>
     2         /// 按条件获取分页数据,返回DataTable对象
     3         /// </summary>
     4         /// <param name="currentPage"></param>
     5         /// <param name="pageSize"></param>
     6         /// <param name="findCondtion"></param>
     7         /// <param name="total"></param>
     8         /// <returns></returns>
     9         public DataTable FindPageByCondition(int currentPage, int pageSize, Hashtable findCondition, out int total)
    10         {
    11             String stmtId = "Article_FindPageByCond";
    12             total = 0;
    13             findCondition.Add("currentPage", currentPage);
    14             findCondition.Add("pageSize", pageSize);
    15             BaseDao bd = new BaseDao();
    16             DataSet ds = bd.QueryForDataSet(stmtId, findCondition);
    17             DataTable dt = ds.Tables[0];
    18             total = Convert.ToInt32(ds.Tables[1].Rows[0][0].ToString());
    19             return dt;
    20         }
    21         
    使用BaseDao.cs返回分页之后的DataTable

    2:如果想要返回泛型集合IList<T>,则使用两个statements。一个select返回实体映射,一个select返回总数。

     1     <select id="Article_GetPageByCond" parameterClass="HashTable" resultMap="FullResultMap" >
     2       <![CDATA[select           
     3                 T.[PK_Article]
     4                 ,T.[ArticleTitle]
     5                 ,T.[ArticleAuthor]
     6                 ,T.[ArticleSummary]
     7                 ,T.[ArticleContent]
     8                 ,T.[Sort]
     9                 ,T.[EditTime]
    10                 ,T.[Dr]
    11                 ,T.[Ts]
    12           from
    13           ( select A.*, ROW_NUMBER() OVER ( ORDER BY 
    14                  (A.[PK_Article] )
    15                   ) rn
    16           from
    17           (select *  from [dbo].[Article]]]>
    18               <dynamic prepend="WHERE">
    19                 <isNotEmpty prepend="and" property="PKArticle">
    20                     PKArticle LIKE '%'+#PKArticle#+'%'
    21                 </isNotEmpty>
    22                 <isNotEmpty prepend="and" property="ArticleTitle">
    23                     ArticleTitle LIKE '%'+#ArticleTitle#+'%'
    24                 </isNotEmpty>
    25                 <isNotEmpty prepend="and" property="ArticleAuthor">
    26                     ArticleAuthor LIKE '%'+#ArticleAuthor#+'%'
    27                 </isNotEmpty>
    28                 <isNotEmpty prepend="and" property="ArticleSummary">
    29                     ArticleSummary LIKE '%'+#ArticleSummary#+'%'
    30                 </isNotEmpty>
    31                 <isNotEmpty prepend="and" property="ArticleContent">
    32                     ArticleContent LIKE '%'+#ArticleContent#+'%'
    33                 </isNotEmpty>
    34                 <isNotNull property="Sort">
    35                     <isNotEmpty property="Sort">
    36                         <isNotEqual prepend="and" property="Sort" compareValue="0">
    37                             Sort LIKE '%'+#Sort#+'%'
    38                         </isNotEqual>
    39                     </isNotEmpty>
    40                 </isNotNull>
    41                 <isNotEmpty prepend="and" property="EditTime">
    42                     EditTime LIKE '%'+#EditTime#+'%'
    43                 </isNotEmpty>
    44                 <isNotEmpty prepend="and" property="Dr">
    45                     Dr LIKE '%'+#Dr#+'%'
    46                 </isNotEmpty>
    47                 <isNotEmpty prepend="and" property="Ts">
    48                     Ts LIKE '%'+#Ts#+'%'
    49                 </isNotEmpty>
    50             </dynamic>
    51           ) A
    52           ) T
    53           where 1=1 and
    54           <![CDATA[  rn <= #currentPage# * #pageSize# ]]>
    55           and  <![CDATA[ rn >(#currentPage# - 1) * #pageSize# ]]>
    56     </select>
    返回映射FullResultMap
     1 <select id="Article_GetCountByCond" resultClass="System.Int32">
     2         <![CDATA[      
     3        SELECT count(*) as total
     4       FROM
     5       ( select A.*, ROW_NUMBER() OVER ( ORDER BY 
     6              (A.[PK_Article] )
     7               ) rn
     8       from
     9       (SELECT *  FROM [dbo].[Article]]]>
    10       <dynamic prepend="WHERE">
    11         <isNotEmpty prepend="and" property="PKArticle">
    12             PKArticle LIKE '%'+#PKArticle#+'%'
    13         </isNotEmpty>
    14         <isNotEmpty prepend="and" property="ArticleTitle">
    15             ArticleTitle LIKE '%'+#ArticleTitle#+'%'
    16         </isNotEmpty>
    17         <isNotEmpty prepend="and" property="ArticleAuthor">
    18             ArticleAuthor LIKE '%'+#ArticleAuthor#+'%'
    19         </isNotEmpty>
    20         <isNotEmpty prepend="and" property="ArticleSummary">
    21             ArticleSummary LIKE '%'+#ArticleSummary#+'%'
    22         </isNotEmpty>
    23         <isNotEmpty prepend="and" property="ArticleContent">
    24             ArticleContent LIKE '%'+#ArticleContent#+'%'
    25         </isNotEmpty>
    26         <isNotNull property="Sort">
    27             <isNotEmpty property="Sort">
    28                 <isNotEqual prepend="and" property="Sort" compareValue="0">
    29                     Sort LIKE '%'+#Sort#+'%'
    30                 </isNotEqual>
    31             </isNotEmpty>
    32         </isNotNull>
    33         <isNotEmpty prepend="and" property="EditTime">
    34             EditTime LIKE '%'+#EditTime#+'%'
    35         </isNotEmpty>
    36         <isNotEmpty prepend="and" property="Dr">
    37             Dr LIKE '%'+#Dr#+'%'
    38         </isNotEmpty>
    39         <isNotEmpty prepend="and" property="Ts">
    40             Ts LIKE '%'+#Ts#+'%'
    41         </isNotEmpty>
    42     </dynamic>
    43       ) A
    44       ) T         
    45     </select>
    返回总数

     使用IList<T> QueryForList<T>(string statementName, object parameterObject);

     1         /// <summary>
     2         /// 按条件获取分页数据,返回IList对象
     3         /// </summary>
     4         /// <param name="currentPage"></param>
     5         /// <param name="pageSize"></param>
     6         /// <param name="findCondtion"></param>
     7         /// <param name="total"></param>
     8         /// <returns></returns>
     9         public IList<Article> GetPageByCondition(int currentPage, int pageSize, Hashtable findCondition)
    10         {
    11             IList<Article> list=new List<Article>();
    12             String stmtId = "Article_GetPageByCond";
    13             findCondition.Add("currentPage", currentPage);
    14             findCondition.Add("pageSize", pageSize);
    15             IList<Article> result = SqlMap.QueryForList<Article>(stmtId,findCondition);
    16             return result;           
    17         }      
    分页返回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);

    1 public IList GetPage(int skipResults, int maxResults, Hashtable findCondition)
    2         {
    3             String stmtId = "Article_GetPageByCond";
    4             IList result = SqlMap.QueryForList(stmtId, findCondition, skipResults, maxResults);
    5             return result;
    6         }
    使用自带的分页功能
    感谢您的认真阅读,更多内容请查看:
    出处:http://www.cnblogs.com/weiqinl
    个人主页http://weiqinl.com
    github: weiqinl
    简书:weiqinl
    您的留言讨论是对博主最大的支持!
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Mysql-函数coalesce-查询为空设置默认值
    js-定时任务setInterval,setTimeout,clearInterval,clearTimeout
    Json-转换
    Hibernate-Criteria用法
    Js-字符转换数字
    Mysql-日期转换
    Freemarker-数字默认格式化问题
    Freemarker-标签使用
    算法-毛利率
    Hibernate-org.hibernate.QueryException: could not resolve property: code of:
  • 原文地址:https://www.cnblogs.com/weiqinl/p/4936114.html
Copyright © 2011-2022 走看看