最通用的ibatis.Net使用sql server存储过程返回分页数据的详细例子
1、ibatis.Net配置文件Common.xml
- <?xml version="1.0" encoding="utf-8" ?>
- <sqlMap namespace="Common" xmlns="http://ibatis.apache.org/mapping"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
- <alias>
- <typeAlias alias="PageCriteria" type="GM.Model.PageCriteria,GM.Model" />
- </alias>
- <parameterMaps>
- <parameterMap id="PageMap" class="PageCriteria">
- <parameter property="TableName" />
- <parameter property="PrimaryKey"/>
- <parameter property="Fields" />
- <parameter property="Condition" />
- <parameter property="CurrentPage" />
- <parameter property="PageSize" />
- <parameter property="Sort" />
- <parameter property="RecordCount" direction="Output" column="RecordCount"/>
- </parameterMap>
- </parameterMaps>
- <statements>
- <procedure id="GetPageData" parameterMap="PageMap" resultClass="Hashtable" >
- [dbo].[ProcGetPageData]
- </procedure>
- </statements>
- </sqlMap>
2、通用分页存储过程ProcGetPageData
- CREATE PROCEDURE [dbo].[ProcGetPageData]
- ( @TableName VARCHAR(1000), --表名,多表是请使用 tA a inner join tB b On a.AID = b.AID
- @PrimaryKey NVARCHAR(100), --主键,可以带表头 a.AID
- @Fields NVARCHAR(2000) = '*',--读取字段
- @Condition NVARCHAR(3000) = '',--Where条件
- @CurrentPage INT = 1, --开始页码
- @PageSize INT = 10, --页大小
- @Sort NVARCHAR(200) = '', --排序字段
- @RecordCount INT = 0 OUT
- )
- AS
- DECLARE @strWhere VARCHAR(2000)
- DECLARE @strsql NVARCHAR(3900)
- IF @Condition IS NOT NULL AND len(ltrim(rtrim(@Condition)))>0
- BEGIN
- SET @strWhere = ' WHERE ' + @Condition + ' '
- END
- ELSE
- BEGIN
- SET @strWhere = ''
- END
- IF (charindex(ltrim(rtrim(@PrimaryKey)),@Sort)=0)
- BEGIN
- IF(@Sort='')
- SET @Sort = @PrimaryKey + ' DESC '
- ELSE
- SET @Sort = @Sort+ ' , '+@PrimaryKey + ' DESC '
- END
- SET @strsql = 'SELECT @RecordCount = Count(1) FROM ' + @TableName + @strWhere
- EXECUTE sp_executesql @strsql ,N'@RecordCount INT output',@RecordCount OUTPUT
- IF @CurrentPage = 1 --第一页提高性能
- BEGIN
- SET @strsql = 'SELECT TOP ' + str(@PageSize) +' '+@Fields
- + ' FROM ' + @TableName + ' ' + @strWhere + ' ORDER BY '+ @Sort
- END
- ELSE
- BEGIN
- /* 执行动态sql*/
- DECLARE @START_ID NVARCHAR(50)
- DECLARE @END_ID NVARCHAR(50)
- SET @START_ID = CONVERT(NVARCHAR(50),(@CurrentPage - 1) * @PageSize + 1)
- SET @END_ID = CONVERT(NVARCHAR(50),@CurrentPage * @PageSize)
- SET @strsql = ' SELECT *
- FROM (SELECT ROW_NUMBER() OVER(ORDER BY '+@Sort+') AS rownum,
- '+@Fields+ '
- FROM '+@TableName + @strWhere +') AS XX
- WHERE rownum BETWEEN '+@START_ID+' AND ' +@END_ID +' ORDER BY XX.rownum ASC'
- END
- EXEC(@strsql)
- RETURN
- GO
3、分页相关信息类PageCriteria
- public class PageCriteria
- {
- private string _TableName;
- public string TableName
- {
- get { return _TableName; }
- set { _TableName = value; }
- }
- private string _Fileds = "*";
- public string Fields
- {
- get { return _Fileds; }
- set { _Fileds = value; }
- }
- private string _PrimaryKey = "ID";
- public string PrimaryKey
- {
- get { return _PrimaryKey; }
- set { _PrimaryKey = value; }
- }
- private int _PageSize = 10;
- public int PageSize
- {
- get{return _PageSize;}
- set{_PageSize = value;}
- }
- private int _CurrentPage = 1;
- public int CurrentPage
- {
- get { return _CurrentPage; }
- set { _CurrentPage = value; }
- }
- private string _Sort = string.Empty;
- public string Sort
- {
- get { return _Sort; }
- set { _Sort = value; }
- }
- private string _Condition = string.Empty;
- public string Condition
- {
- get { return _Condition; }
- set { _Condition = value; }
- }
- private int _RecordCount;
- public int RecordCount
- {
- get { return _RecordCount; }
- set { _RecordCount = value; }
- }
- }
3、调用存储过程方法返回数据

- public IList<Hashtable> GetListForPageSummary(PageCriteria criteria)
- {
- criteria.TableName ="Person";
- criteria.PrimaryKey = "Id";
- criteria.Fields = @"*";
- return Mapper.Instance().QueryForList<Hashtable>("GetPageData", criteria);
- }
注意:Condition不用再加where关键词了。
文章来源:http://www.lanhusoft.com/Article/97.html
最通用的ibatis.Net使用sql server存储过程返回分页数据的详细例子的更多相关文章
- Sql Server 存储过程中查询数据无法使用 Union(All)
原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正 ...
- sql server中的分页数据查询
1.引言 今天在工作中遇到一个需要进行sql server分页数据查询的问题,但是分页数据查询的sql却忘记了,最终通过查询资料解决了该问题.现在把解决方法记下,以备查阅. 在这里需要感谢博客园的Ql ...
- SQL Server 存储过程进行分页查询
CREATE PROCEDURE prcPageResult -- 获得某一页的数据 -- @currPage INT = 1 , --当前页页码 (即Top currPage) @showColum ...
- sql server存储过程返回数据只有一个字符
SqlParameter[] param = { new SqlParameter("@shopId",shopId), new SqlParameter("@newSh ...
- 一条sql 执行查询列表 返回分页数据以及总数 totalCount
SELECT ID,Name,Age,Addr,Tel,COUNT(1) OVER() AS totalFROM dbo.Student WHERE Age>22 ORDER BY id DES ...
- 恢复SQL Server被误删除的数据(再扩展)
恢复SQL Server被误删除的数据(再扩展) 大家对本人之前的文章<恢复SQL Server被误删除的数据> 反应非常热烈,但是文章里的存储过程不能实现对备份出来的日志备份里所删数据的 ...
- 恢复SQL Server被误删除的数据
恢复SQL Server被误删除的数据 <恢复SQL Server被误删除的数据(再扩展)> 地址:http://www.cnblogs.com/lyhabc/p/4620764.html ...
- 初识 Sql Server存储过程
开篇语 之前的公司并未使用存储过程来做项目,所以小生对存储过程的调用.使用也是一知半解,刚好这家公司就大量用到了存储过程 这次做的功能,为了保持风格一致,也是需要使用存储过程来实现动态sql和数据分页 ...
- sql server存储过程中SELECT 与 SET 对变量赋值的区别
SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT. 对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们 并没有注意,其实这 ...
随机推荐
- Linux 查询程序安装路径 是否安装
rpm -ql httpd #[搜索rpm包]--list所有文件安装目录 rpm -q mysql //查询程序是否安装 关于rpm详细用法 参考 http://www.cnblogs.com/x ...
- SPFA中 正逆邻接表的建立
正邻接表的建立: 先定义一个结构体: struct node { int r,v,w,next; }Map[]; 每输入一组数据 就通过Add函数加入到邻接表中,上图已经说得很明白了,结合着下面的代码 ...
- Fragment管理
Fragments 设计理念 在设计应用时特别是Android 应用 ,有众多的分辨率要去适应,而fragments 可以让你在屏幕不同的屏幕上动态管理UI.例如:通讯应用程序(QQ),用户列表可以在 ...
- (转)hadoop三个配置文件的参数含义说明
hadoop三个配置文件的参数含义说明 1 获取默认配置 配置hadoop,主要是配置core-site.xml,hdfs-site.xml,mapred-site.xml三个配 ...
- Python3基础 list(enumerate()) 将一个列表的每一个元素转换成 带索引值的元组
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- iOS 热更新插件
1.JSPatch 平台 http://jspatch.com/Docs/intro 2.React Native 中文文档 http://wiki.jikexueyuan.com/project/r ...
- python赋值和拷贝----一切皆对象,参数皆引用
摘要: 1 python中的一切事物皆为对象,并且规定参数的传递都是对象的引用. 2 python参数传递都是"传对象引用"方式.实际上相当于c++中传值和传引用的结合. 3 如 ...
- higncharts 编辑Highcharts.com链接
credits: { text: 'Example.com', href: 'http://www.example.com' }, 只 ...
- centos常用配置收集
配置ntp服务器: # vi /etc/ntp.conf driftfile /var/lib/ntp/driftrestrict -4 default kod notrap nomodifyrest ...
- fuel 6.1自动推送3控高可用centos 6.5 juno环境排错(二)
https://docs.mirantis.com/openstack/fuel/fuel-6.1/ 由于在测试高可用时,我是用esxi虚拟机测试,测试过程中遇到了网络问题:虚拟机间网络不通,故从网络 ...