代码改变世界

Asp.net mvc +Ajax +Extjs+NHibernate 系列之数据库DAO,Bussiness,Service三层

  c#在路上  阅读(1224)  评论(0编辑  收藏  举报

概述:

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的一些详细的讲解,这里不在累述了。要去看相关的书籍。

总结:

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

点击右上角即可分享
微信分享提示