zoukankan      html  css  js  c++  java
  • Asp.net mvc +Ajax +Extjs+NHibernate 系列之数据库DAO,Bussiness,Service三层

    概述:

    SystemConfigMVCDemo.DAO,SystemConfigMVCDemo.Bussiness,

    SystemConfigMVCDemo.Service 封装了访问数据库的框架,然后该框架易于拓展,即在数据库表对象的增加,删除,修改时,简单修改框架就可以使用了。该三层使用了面向对象的设计,从而能够拓展。

    详解:

    (1)SystemConfigMVCDemo.DAO,如下是该动态链接库的类图:

     

    HibernateAccess 类 有二个作用:1,管理Hibernate的Session对象。2,实现了对象的增加,删除,修改的方法。

    HibernateDAO 类,实现了IBussinessDAO接口的几个方法,在HibernateDAO类中,包含了HibernateAccess对象,所以通过HibernateAccess对象来访问数据库。

    SystemConfigDAO类,继承HibernateDAO 类,因为HibernateDAO 类中的方法是共有的,所以子类中可以访问。所以在SystemConfigDAO类的对象边可以使用HibernateDAO 类中的方法。还有一点,HibernateDAO类中的HibernateAccess类对象是protected型的,所以在SystemConfigDAO类中可以使用,以便来拓展自己的一些特殊的方法。

    贴出几个类的简短代码:

    HibernateAccess :

    代码
     public class HibernateAccess : IDisposable
        {
            [ThreadStatic]
            
    private static ISession m_Session;

            
    protected static ISessionFactory m_SessionFactory;

            
    #region Session管理

            
    /// <summary>
            
    /// 静态构造函数。
            
    /// </summary>
            static HibernateAccess()
            {
                Init();
            }

            
    /// <summary>
            
    /// 初始化NHibernate对象。
            
    /// </summary>
            private static void Init()
            {
                
    try
                {
    #if test
                    sessionFactory 
    = new Configuration().Configure(@"C:\conn1\hibernate.cfg.config").BuildSessionFactory();
    #endif
    #if first
                    
    string currrentPath=System.AppDomain.CurrentDomain.BaseDirectory;
                    m_SessionFactory 
    = new Configuration().Configure(currrentPath + @"\hibernate.cfg.config").BuildSessionFactory();
    #endif
    #if second
                    sessionFactory 
    = new Configuration().Configure("hibernate.cfg.xml").BuildSessionFactory();
    #endif
                }
                
    catch (Exception exp)
                {
                    
    throw exp;
                }
            }
            
    #endregion

            
    /// <summary>
            
    /// 获得NHibernate的Session对象。
            
    /// </summary>
            public ISession Session
            {
                
    get
                {
                    
    if (m_Session == null)
                    {
                        
    lock (SessionFactory)
                        {
                            m_Session 
    = SessionFactory.OpenSession();
                        }
                    }
                    
    else
                    {
                        
    if (!m_Session.IsOpen)
                            m_Session.Reconnect();
                    }

                    
    return m_Session;
                }
            }

            
    /// <summary>
            
    /// 获取NHibernate的SessionFactory对象。
            
    /// </summary>
            public static ISessionFactory SessionFactory
            {
                
    get
                {
                    
    return m_SessionFactory;
                }
            }

            
    #region 增加,删除,修改,查询的基本方法

            
    #region 查询
            
    /// <summary>
            
    /// 获取指定的对象。
            
    /// </summary>
            
    /// <param name="key">对象的关键字</param>
            
    /// <param name="type">对象类型。</param>
            
    /// <returns>如果对象存在则返回对象,否则返回Null。</returns>
            public virtual object Find(object key, Type type)
            {
                
    return Session.Get(type, key);
            }
            #endgrion
            
            
    #region 增加
            
    #endregion 
            
            
    #region 删除
            
    #endregion
            
            
    #region 修改
            
    #endregion
    }
            

    IBussinessDAO接口:

     public interface IBussinessDAO<T, IdT>
        {
            T GetById(IdT pkid);
            IList
    <T> GetList();
            IList
    <T> FindAll();
            T Save(T entity);
            T Update(T entity);
            
    void Delete(T entity);
        }

    HibernateDAO类:

    代码
     public class HibernateDAO<T, IdT> : IBussinessDAO<T, IdT>
        {
            
    protected HibernateAccess access = new HibernateAccess();

            
    #region IBussinessDAO<T,IdT> 成员

            
    /// <summary>
            
    /// 获取T对象
            
    /// </summary>
            
    /// <param name="pkid">pkid</param>
            
    /// <returns>T对象</returns>
            public virtual T GetById(IdT pkid)
            {
                
    object obj = access.Find(pkid, typeof(T));
                
    return (T)obj;
            }

            
    /// <summary>
            
    /// 获取T对象List
            
    /// </summary>
            
    /// <returns>T对象List</returns>
            public virtual IList<T> GetList()
            {
                
    return access.Find<T>();
            }
    }
    SystemConfigDAO 类:
       
    public class SystemConfigDAO : HibernateDAO<SystemConfig, decimal>
        {
            
    /// <summary>
            
    /// 分页查询系统设置对象
            
    /// </summary>
            
    /// <param name="pageIndex">当前页面值</param>
            
    /// <param name="pageSize">每页显示记录数 </param>
            
    /// <returns>系统设置对象列表</returns>
            public List<SystemConfig> GetByPage(int pageIndex, int pageSize)
            {
                List
    <SystemConfig> configList = new List<SystemConfig>();
                
    if (pageIndex >= 1 && pageSize >= 1)
                {
                    
    string tempStr = "select top {0} " +
                                 
    "sc.SystemConfigID,sc.FieldName,sc.FieldValue,sc.FieldGroup,sc.Creator,sc.CreateDT,sc.Updator,sc.UpdateDT " +
                                 
    "from SystemConfig sc where sc.SystemConfigID not in " +
                                 
    "" +
                                 
    "select top {1} SystemConfigID from SystemConfig " +
                                 
    "order by SystemConfigID " +
                                 
    "" +
                                 
    "order by sc.SystemConfigID ";
                    
    //ISQLQuery query=access.Session.CreateSQLQuery("select sc.SystemConfigID,sc.FieldName,sc.FieldValue,sc.FieldGroup,sc.Creator,sc.CreateDT,sc.Updator,sc.UpdateDT from SystemConfig sc");
                    string queryStr = string.Format(tempStr, pageSize, pageIndex * pageSize - 5);
                    ISQLQuery query 
    = access.Session.CreateSQLQuery(queryStr);
                    query.AddEntity(
    typeof(SystemConfig));
                    IList
    <SystemConfig> iConfigList = query.List<SystemConfig>();
                    configList 
    = iConfigList as List<SystemConfig>;
                }
                
    return configList;
    }

            }

    (2)SystemConfigMVCDemo.Bussiness

    SystemConfigServiceImpl类实现IServiceImpl接口,在类中包含SystemConfigDAO对象,用来访问数据库。

    (3)SystemConfigMVCDemo.Service

    SystemConfigService类实现IService接口,在类中包含SystemConfigServiceImpl类的对象,用来访问数据库。

    这个类是在外部调用的类,界面使用此类。

    实现要点:

    该类库的重点在于HibernateAccess类,只要获得NHibernateSession对象,便可以对数据库的操作游刃有余。对于NHibernate的一些详细的讲解,这里不在累述了。要去看相关的书籍。

    总结:

    面向对象的特性,以及泛型编程在实际中的应用。继承,类的访问规则等。 

  • 相关阅读:
    隐式马尔科夫模型
    TCP与UDP协议
    语法分析
    requests发送HTTP请求
    IPv6协议
    IP协议
    路由协议
    Django表单验证
    PDB调试Python程序
    word2vec模型原理与实现
  • 原文地址:https://www.cnblogs.com/csharponworking/p/1782610.html
Copyright © 2011-2022 走看看