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
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>
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 }
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
您的留言讨论是对博主最大的支持!
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。