惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
P
Privacy International News Feed
W
WeLiveSecurity
Spread Privacy
Spread Privacy
S
Schneier on Security
Google Online Security Blog
Google Online Security Blog
N
News and Events Feed by Topic
Forbes - Security
Forbes - Security
Cisco Talos Blog
Cisco Talos Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
L
Lohrmann on Cybersecurity
P
Privacy & Cybersecurity Law Blog
T
The Exploit Database - CXSecurity.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
人人都是产品经理
人人都是产品经理
SecWiki News
SecWiki News
Schneier on Security
Schneier on Security
月光博客
月光博客
博客园_首页
腾讯CDC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
Cyberwarzone
Cyberwarzone
www.infosecurity-magazine.com
www.infosecurity-magazine.com
AWS News Blog
AWS News Blog
WordPress大学
WordPress大学
AI
AI
酷 壳 – CoolShell
酷 壳 – CoolShell
Hacker News: Ask HN
Hacker News: Ask HN
Attack and Defense Labs
Attack and Defense Labs
IT之家
IT之家
P
Proofpoint News Feed
The Hacker News
The Hacker News
The Cloudflare Blog
Vercel News
Vercel News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Cloudbric
Cloudbric
C
Cisco Blogs
TaoSecurity Blog
TaoSecurity Blog
I
Intezer
Jina AI
Jina AI
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
Microsoft Azure Blog
Microsoft Azure Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
B
Blog

博客园 - 萧风的风

mac系统下Eclipse + pydev配置python Interpreter spring 整合mongodb报NoSuchMethodError错误 mybatis在spring(Controller) 中的事务配置问题 IT经理工作职责 淘宝数据魔方技术架构解析 使用 python 开发 Web Service 安装配置Django开发环境(Eclipse + Pydev) 又拍网架构-又一个用到python的网站 SQL SERVER分页写法 令人崩溃的nhibernate配置 SQL Server 2008 收缩日志 清空删除大日志文件 访问IIS时,名称以无效字符开头。。。解决方案 IIS fastcgi 超时处理 Delphi错误:Stack overflow的解决方法 某公司面试是在的解决方法 jsforum研究。一个比较简单的论坛。 关于eclipse无法自动编译的问题 Myeclipse 文件夹src下的内容、WEB-INF\classes下的内容 - 萧风的风 - 博客园 OSChina底层数据库操作的类(QueryHelper)源码
nhibernate的分页方法
萧风的风 · 2011-11-16 · via 博客园 - 萧风的风

在使用nhibernate的时候,想用来实现一个较简单的分页。

tMessage 表结构如下

image

在Default.cs中写了一个函数LoadMessages()

private void LoadMessages()
        {
            int page = 1;
            if (Request.Params["page"] != null)
            {
               
                page = Int32.Parse(Request.Params["page"]);
            }
            currentPage = page;
            if (page > 1)
            {
                lbtnPrevPage.Enabled = true;
                lbtnPrevPage.PostBackUrl = string.Format("default.aspx?page={0}", page - 1);
            }
            else
            {
                lbtnPrevPage.Enabled = false;
            }
            lbtnNextPage.PostBackUrl = string.Format("default.aspx?page={0}", page + 1);
            //根据当前页填写<前页><后页>
            helper = new NHibernateHelper();
            session = helper.GetSession();
            IList<Message> ml = session.CreateQuery("from Message order by CreateTime DESC").
                                    .SetFirstResult((page-1) * pageSize)
                                    .SetMaxResults(pageSize)
                                    .List<Message>();
            rptMessages.DataSource = ml;
            rptMessages.DataBind();
        }

lbtnPrevPage, lbtnNextPage为页面上的【前页】、【后页】的相关图标。

关键的是这一行

IList<Message> ml = session.CreateQuery("from Message order by CreateTime DESC").
                                    .SetFirstResult((page-1) * pageSize)
                                    .SetMaxResults(pageSize)
                                    .List<Message>();

IQuery接口的.SetFirstResult, .SetMaxResults为两个重要方法,SetFirstResult即指定结果集中开始行数,如为第1页,则开始行应该为0,如为第2页,则开始行应为 (2-1) * 每页记录数。SetMaxResults指定返回的结果的行数,即每页记录数。

执行效率

NHibernate执行为延迟执行,即在调用这两个方法后,会自动组合最优SQL,进行分页,因此执行起来的效率还不算太低,我的这个表中记录大概为15000行,第一次返回时的结果为1751ms,以后每次则只需要40-80ms之间。