• 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 1false 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

  • 相关阅读:
    前端学习之路,新手必看
    css常用的属性方法 上篇
    H5音乐播放器源码地址
    H5音乐播放器源码共享
    H5音乐播放器【歌单列表】
    (1)H5实现音乐播放器【正在播放-歌词篇】
    JS 对数组的操作集锦(基础)
    完整的淘宝页面模板
    一次上机试题(面向对象)
    python select方法的使用
  • 原文地址:https://www.cnblogs.com/chenyt/p/1924361.html
Copyright © 2020-2023  润新知