zoukankan      html  css  js  c++  java
  • nhibernate的分页方法

    在使用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之间。

  • 相关阅读:
    ES6之6种遍历对象属性的方法
    css自定义滚动条样式,自定义文字选择样式,设置文字不被选择
    js img转换base64
    移动端rem造成的很多问题
    移动端边框1像素的问题
    【小练习1】如何制作“表单”
    2015-09-24 第六节课 (CSS补充和html 标签讲解、浏览器兼容性)
    2015-09-22 第四节课 CSS块级元素 行内元素 浮动 盒子模型 绝对定位、相当定位和固定定位
    2015-09-21 第三节课 css属性 border(边框)、background(背景)
    html你可能还不知道的一些知识点
  • 原文地址:https://www.cnblogs.com/zhuxiangguo/p/2250929.html
Copyright © 2011-2022 走看看