Nhibernate分页测试续(附源码)

接着上一篇Nhibernate分页测试,最近一直在接触Nhibernate,接触的越多、了解越深,越是感觉他的强大,很多功能都封装的很好,对数据操作是那么的简单。接下来介绍的是MVC+Nhibernate分页的应用:

1.配置


<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <session-factory>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">
      Data Source=.;Initial Catalog=NhibernateDemoDB;Persist Security Info=True;Integrated Security=SSPI;
    </property>
    <property name="adonet.batch_size">10</property>
    <property name="show_sql">true</property>
    <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
    <property name="use_outer_join">true</property>
    <property name="command_timeout">10</property>
    <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
    <property name="proxyfactory.factory_class">
      NHibernate.ByteCode.Castle.ProxyFactoryFactory,
      NHibernate.ByteCode.Castle
    </property>
    <mapping assembly="NhibernateDemo.Data"/>
  </session-factory>
</hibernate-configuration>

配置想必接触过Nhibernate的人或多或少都有所了解,在这就不多加说明了。

2.映射

传统对象和关系数据库之间的映射是用一个XML文档(XML document)来定义的,这个映射文档被设计为易读的,并且可以手工修改。而我更喜欢的是用Fluent Nhibernate一个开源的框架,有了它就可以脱离传统的Nhibernate配置文件配置映射文件的方式,而采用强类型方式映射。如下:


    public class CustomerMap:ClassMap<Customer>
    {
        public CustomerMap()
        {
            Id(m => m.Id);             Map(m => m.Name);             Map(m => m.Tel);             Map(m => m.Address);             Map(m => m.CreateDate);             Map(m => m.Sex);
        }
    }

3.创建ISession

Nhibernate操作数据库要通过ISession(NHibernate的工作单元),框架Fluent Nhibernate下创建ISession可看Fluent NHibernate的初识。如下


    public class NHibernateHelper
    {
        private static Configuration configuration = null;
        private static ISessionFactory sessionFactory = null;         public static void CreateConfiguration()
        {
            configuration = new Configuration().Configure();
        }         public static Configuration Configuration
        {
            get
            {
                if (configuration == null)
                {
                    CreateConfiguration();
                }
                return configuration;
            }
            set { configuration = value; }
        }         public static ISessionFactory SessionFactory
        {
            get
            {
                if (sessionFactory == null)
                {
                    if (Configuration == null)
                    {
                        CreateConfiguration();
                    }
                    FluentConfiguration fluentConfiguration = Fluently.Configure(Configuration);
                    string path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
                    string assemblyFile = Path.Combine(path, "bin/NhibernateDemo.Data.dll");
                    fluentConfiguration.Mappings(delegate(MappingConfiguration m)
                    {
                        Assembly assembly = Assembly.LoadFrom(assemblyFile);
                        m.HbmMappings.AddFromAssembly(assembly);
                        m.FluentMappings.AddFromAssembly(assembly).Conventions.AddAssembly(assembly);
                    });
                    return fluentConfiguration.BuildSessionFactory();
                }
                else
                {
                    return sessionFactory;
                }
            }
        }         public static ISession CreateSession()
        {
            return SessionFactory.OpenSession();
        }
        
    }

CreateSession方法创建了一个ISession。

4.分页方法


        /// <summary>
        /// 获取分页
         /// </summary>
        /// <param name="pageStart"></param>
        /// <param name="pageLimit"></param>
        /// <returns></returns>
        public IList<Customer> GetCustomerPageModel(int pageStart, int pageLimit)
        {
            //HQL查询
            IList<Customer> customerList = Session.CreateQuery("from Customer")
                .SetFirstResult(pageStart * pageLimit)
                .SetMaxResults(pageLimit)
                .List<Customer>();
            return customerList;             //条件查询
            //return Session.CreateCriteria(typeof(Customer))
            //    .SetProjection(Projections.ProjectionList()
            //    .Add(Projections.Property("Id"), "Id")
            //    .Add(Projections.Property("Name"), "Name")
            //    .Add(Projections.Property("Tel"), "Tel")
            //    .Add(Projections.Property("Address"), "Address")
            //    .Add(Projections.Property("Sex"), "Sex")
            //    .Add(Projections.Property("CreateDate"), "CreateDate"))
            //    .AddOrder(Order.Asc("Id"))
            //    .SetFirstResult(pageStart * pageLimit)
            //    .SetMaxResults(pageLimit)
            //    .SetResultTransformer(Transformers.AliasToBean(typeof(Customer)))
            //    .List<Customer>();             //SQL查询
            //IList<Customer> customerList = Session.CreateSQLQuery("SELECT * FROM Customer")
            //    .SetFirstResult(pageStart*pageLimit)
            //    .SetMaxResults(pageLimit)
            //    .SetResultTransformer(Transformers.AliasToBean<Customer>()).List<Customer>(); 
            //return customerList;
        }

在Nhibernate里实现分页用 SetFirstResult 和SetMaxResults实现,SetFirstResult 简单的理解就是从第几条记录开始,SetMaxResults是取几条记录。如上代码,列出了Nhibernate三种查询分页的方式,使用哪种方式就看个人爱好了。

以下是运行后的截图:

客户端采用JQuery.

项目中碰到了用jQuery从后台获取的json格式的日期的字符串,需要将此字符串转换成JavaScript的日期对象,以下是网上找的解决方法:

//转换json格式的日期(如:{ServerDatetime:"\/Date(1278930470649)\/"})转换为Javascript的日期对象
function ConvertJSONDateToJSDateObject(JSONDateString) {
     var date = new Date(parseInt(JSONDateString.replace("/Date(", "").replace(")/", ""), 10));
     return date;           
}

源码:NhibernateDemo.rar

 

当前标签: Nhibernate

 
Nhibernate分页测试续(附源码) john chen 2011-01-03 02:48 阅读:1696 评论:0  
 
Fluent NHibernate的初识 john chen 2010-12-21 18:37 阅读:965 评论:0  
 
NHibernate分页的测试 john chen 2010-12-04 08:54 阅读:2320 评论:7  

Nhibernate分页测试续的更多相关文章

  1. NHibernate分页

    转载:http://www.cnblogs.com/tenghoo/archive/2011/02/14/1954393.html NHibernate专题:http://kb.cnblogs.com ...

  2. mysql数据库千万级别数据的查询优化和分页测试

    原文地址:原创 mysql数据库千万级别数据的查询优化和分页测试作者:于堡舰 本文为本人最近利用几个小时才分析总结出的原创文章,希望大家转载,但是要注明出处 http://blog.sina.com. ...

  3. 《手把手教你》系列技巧篇(五十八)-java+ selenium自动化测试-分页测试(详细教程)

    1.简介 前几天,有人私信里留言问宏哥,分页怎么自动化测试了,完了给他说了说思路,不知道最后搞定没有,索性宏哥就写一篇文章来讲解和介绍如何处理分页. 2.测试场景 对分页来说,我们最感兴趣的和测试的无 ...

  4. 使用COSBench工具对ceph s3接口进行压力测试--续

    之前写的使用COSBench工具对ceph s3接口进行压力测试是入门,在实际使用是,配置内容各不一样,下面列出 压力脚本是xml格式的,套用UserGuide文档说明,如下 有很多模板的例子,在co ...

  5. mysql 分页测试,

    大环境:MySQL5.6 自己造了 27万数据, 一次性 查出来,会超时: 而分页跑,会查出来8s: 但是在少于27万时,直接查比 分页查快5倍:

  6. Nhibernate 分页功能

    cs: public IEnumerable<ArticleView> MyGetAll(int start, int limit, ref int count) { try { var ...

  7. Nhibernate 分页

    public IList<Student> GetStudentByPage(int pageSize, int pageIndex, string SName) { ISession s ...

  8. [转]Sql server 大数据量分页存储过程效率测试附代码

    本文转自:http://www.cnblogs.com/lli0077/archive/2008/09/03/1282862.html 在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下 ...

  9. 四种方式实现SQLServer 分页查询

    SQLServer 的数据分页: 假设现在有这样的一张表:CREATE TABLE test( id int primary key not null identity, names varchar( ...

随机推荐

  1. SVN常见错误两项纪录

    1.svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted 也许前clean ...

  2. Oracle查询速度慢的原因总结

    Oracle查询速度慢的原因总结 查询速度慢的原因很多,常见如下几种:1,没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2,I/O吞吐量小,形成了瓶颈效应.3,没有创建计算列导致 ...

  3. SharePoint 2010 升级到2013时间 为了确保用户可以连接,但无法改变升级数据

    SharePoint 2010 升级到2013时间 为了确保用户可以连接,但无法改变升级数据 我总结的步骤 红色请注意它们的含义. 步骤1:连接到SQL DBS 上的SharePoint 2010数据 ...

  4. Android FM学习中的模块 FM启动过程

    最近的研究FM模,FM是一家值我正在学习模块.什么可以从上层中可以看出. 上层是FM按钮的操作和界面显示,因此调用到FM来实现广播收听的功能. 看看Fm启动流程:例如以下图: 先进入FMRadio.j ...

  5. HTML5游戏开发引擎Pixi.js完全入门手册(一)框架简介及框架结构分析,作者思路剖析

    前言: 最近无聊在淘宝弄了个小店,打算做一个兼职.遇到一个客户,要我帮忙拷贝一个html5游戏.. 我这人有一个习惯,拿到自己没见过的东西.都会去研究一番.去网上查了下发现,资料都是英文版.感觉极度不 ...

  6. 由一道面试题想到的:Finally

    找工作时,有这样一道题: try{}里面有一条return语句,那么紧跟在这个try后的finally{}里的代码会不会执行,什么时候执行,在return之前还是之后? 我没有怎么思考,根据脑子里仅有 ...

  7. 用Fine Uploader+ASP.NET MVC实现ajax文件上传[代码示例]

    Fine Uploader(http://fineuploader.com/)是一个实现 ajax 上传文件的 Javascript 组件. This project attempts to achi ...

  8. 通过私有协议Chrome浏览器页面打开本地程序

    近期方有这样的要求:这两个系统,根据一组Chrome开展,根据一组IE开展,需要Chrome添加一个链接,然后进入IE该系统的开发.这,需要Chrome跳转到创建一个链接IE浏览器指定的页面.同时也实 ...

  9. Asp.net实现URL重写

    原文:Asp.net实现URL重写 [概述] URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程.重写URL是非常有用的一个功能,因为它可以让你提高搜索引擎阅读 ...

  10. ORA-00932: inconsistent datatypes: expected - got CLOB

    从最近的数据库10.2.0.3升级到10.2.0.5之后,一些对象可以不被编译.查看这些对象的主列表不严格写入之前现在SQL这些语法结果package无法成功编译,诸如select查询列中不能使用混淆 ...