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

转载于:https://www.cnblogs.com/chenyt/archive/2011/01/03/1924361.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值