/n3c/N3C.DAO/AbstractDAO.cs
C# | 485 lines | 273 code | 40 blank | 172 comment | 10 complexity | 92038f70bb574f96f81854f85f9a6ff6 MD5 | raw file
Possible License(s): AGPL-3.0, LGPL-2.1
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using NHibernate;
- using NHibernate.Criterion;
- using log4net;
-
- /*
- * ??????????
- * http://www.cnblogs.com/bluesky521/archive/2008/03/18/1111889.html
- * ????????????????
- *
- */
- namespace N3C.DAO
- {
- public abstract class AbstractDAO
- {
- protected ISession session;
- protected ITransaction tx;
- private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
- /*
- * ????,??????????(FOR SQLITE)
- */
- #region CUD??
-
- protected void Save(Object obj)
- {
- try
- {
- StartOperation();
- session.Save(obj);
- tx.Commit();
- }
- catch (HibernateException e)
- {
- HandleException(e);
- }
- finally
- {
- session.Close();
- }
- }
-
- /// <summary>
- /// ??????
- /// </summary>
- /// <param name="list"></param>
- protected void Save(List<Object> list)
- {
- try
- {
- StartOperation();
- foreach (Object li in list)
- {
- session.Save(li);
- }
- tx.Commit();
- }
- catch (HibernateException e)
- {
- HandleException(e);
- }
- finally
- {
- session.Close();
- }
- }
-
- protected void Update(Object obj)
- {
- try
- {
- StartOperation();
- session.Update(obj);
- tx.Commit();
- }
- catch (HibernateException e)
- {
- HandleException(e);
- }
- finally
- {
- session.Close();
- }
- }
-
- protected void Delete(Object obj)
- {
- try
- {
- StartOperation();
- session.Delete(obj);
- tx.Commit();
- }
- catch (HibernateException e)
- {
- HandleException(e);
- }
- finally
- {
- session.Close();
- }
- }
- #endregion
-
- #region ????
- /// <summary>
- /// ??????
- /// </summary>
- /// <param name="clazz">????</param>
- /// <param name="id">??ID</param>
- /// <returns></returns>
- protected Object Find(System.Type clazz, Object id)
- {
- Object obj = null;
- try
- {
- StartOperation();
- obj = session.Get(clazz, id);
- tx.Commit();
- }
- catch (HibernateException e)
- {
- HandleException(e);
- }
- finally
- {
- session.Close();
- }
-
- return obj;
- }
-
- /// <summary>
- /// ????/????
- /// </summary>
- /// <param name="clazz"></param>
- /// <param name="ord"></param>
- /// <param name="Max">true:????false:???</param>
- /// <param name="exp"></param>
- /// <returns></returns>
- protected Object Find(System.Type clazz, Order ord, Boolean Max, IList<ICriterion> exp)
- {
- IList objList = null;
- try
- {
- StartOperation();
- //????
- ICriteria criteria = session.CreateCriteria(clazz);
- if (null != exp)
- {
- foreach (ICriterion ex in exp)
- {
- criteria.Add(ex);
- }
- }
- criteria.AddOrder(ord).SetFirstResult(0).SetMaxResults(1);
- objList = criteria.List();
-
- tx.Commit();
- }
- catch (HibernateException e)
- {
- HandleException(e);
- }
- finally
- {
- session.Close();
- }
-
- return objList.Count > 0 ? (Object)objList[0] : null ;
- }
-
- /// <summary>
- /// ??????????
- /// </summary>
- /// <param name="clazz">????</param>
- /// <param name="id">???ID</param>
- /// <param name="ordCol">??????</param>
- /// <param name="preNext">true:????false:???</param>
- /// <param name="full">?????</param>
- /// <returns></returns>
- protected Object Find(System.Type clazz, Object id,Object ordCol, Boolean preNext,Boolean full)
- {
- //IList objList = null;
- Order ord = new Order((string)ordCol, !preNext);
- IList<ICriterion> exp = new List<ICriterion>();
-
- exp.Add((preNext) ? Expression.Lt((string)ordCol, id) : Expression.Gt((string)ordCol, id));
-
- if (!full) { exp.Add(Expression.Eq("IsPublic", 1)); }
-
- return this.Find(clazz, ord, preNext, exp);
-
- }
-
- /// <summary>
- /// ??????(??/??)
- /// </summary>
- /// <param name="clazz">????</param>
- /// <param name="ordCol">????</param>
- /// <param name="Asc">????(true:??/fase:??)</param>
- /// <returns></returns>
- protected IList FindAll(System.Type clazz, Object ordCol, Boolean Asc, Boolean full)
- {
- //IList objList = null;
- Order ord = new Order((string)ordCol, Asc);
- IList<ICriterion> exp = new List<ICriterion>();
- if (!full) { exp.Add(Expression.Eq("IsPublic", 1)); }
-
- return this.FindAll(clazz, ord, exp);
- }
-
- /// <summary>
- /// ???????????(??/??)
- /// </summary>
- /// <param name="parentCol">???????</param>
- /// <param name="parentId">???</param>
- /// <param name="clazz">????</param>
- /// <param name="ordCol">????</param>
- /// <param name="Asc">????(true:??/fase:??)</param>
- /// <returns></returns>
- protected IList FindAll(System.Type clazz, Object parentCol, Object parentId, Object ordCol, Boolean Asc, Boolean full)
- {
- //IList objList = null;
- Order ord = new Order((string)ordCol, Asc);
- IList<ICriterion> exp = new List<ICriterion>();
-
- exp.Add(Expression.Eq((string)parentCol, parentId));
- if (!full) { exp.Add(Expression.Eq("IsPublic", 1)); }
-
- return this.FindAll(clazz, ord, exp);
-
- }
-
- /// <summary>
- /// ????????????(????)
- /// </summary>
- /// <param name="clazz">????</param>
- /// <param name="start">?????</param>
- /// <param name="offset">?????</param>
- /// <param name="ordCol">????</param>
- /// <param name="Asc">????(true:??/false:??)</param>
- /// <param name="TotalCount">??(???)</param>
- /// <returns></returns>
- protected IList FindAll(System.Type clazz, int start, int offset, string ordCol, Boolean Asc, Boolean full, out int TotalCount)
- {
- IList objList = null;
- Order ord = new Order((string)ordCol, Asc);
- Object objCount = null;
- try
- {
- StartOperation();
- ICriteria criteria = session.CreateCriteria(clazz);
- if (!full) { criteria.Add(Expression.Eq("IsPublic", 1)); }
- //??????
- objCount = criteria.SetProjection(Projections.Count((string)ordCol)).UniqueResult();
- criteria.SetProjection(null);
- //????
- objList = criteria.AddOrder(ord)
- .SetFirstResult(start).SetMaxResults(offset)
- .List();
- tx.Commit();
- }
- catch (HibernateException e)
- {
- HandleException(e);
- }
- finally
- {
- session.Close();
- }
- Int32.TryParse(objCount.ToString(),out TotalCount);
- return objList;
- }
-
- /// <summary>
- /// ????????????(????)
- /// </summary>
- /// <param name="clazz">????</param>
- /// <param name="start">?????</param>
- /// <param name="offset">?????</param>
- /// <param name="ordCol">????</param>
- /// <param name="Asc">????(true:??/false:??)</param>
- /// <returns></returns>
- protected IList FindAll(System.Type clazz, int start, int offset, string ordCol, Boolean Asc, Boolean full)
- {
- IList objList = null;
- Order ord = new Order((string)ordCol, Asc);
- try
- {
- StartOperation();
- //????
- ICriteria criteria = session.CreateCriteria(clazz)
- .AddOrder(ord);
- if (!full) { criteria.Add(Expression.Eq("IsPublic", 1)); }
- objList = criteria.SetFirstResult(start).SetMaxResults(offset).List();
- tx.Commit();
- }
- catch (HibernateException e)
- {
- HandleException(e);
- }
- finally
- {
- session.Close();
- }
- return objList;
- }
-
- /// <summary>
- /// ????????????
- /// (?????,??????????,??????????)
- /// </summary>
- /// <param name="clazz">????</param>
- /// <param name="byColName">???????</param>
- /// <param name="CategoryId">?????</param>
- /// <param name="start">?????</param>
- /// <param name="offset">?????</param>
- /// <param name="ordCol">????</param>
- /// <param name="Asc">????(true:??/false:??)</param>
- /// <returns></returns>
- protected IList FindAll(System.Type clazz, Object parentCol, Object parentId, int start, int offset,
- string ordCol, Boolean Asc, Boolean full)
- {
- IList objList = null;
- Order ord = new Order(ordCol, Asc);
- try
- {
- StartOperation();
- //????
- ICriteria criteria = session.CreateCriteria(clazz)
- .Add(Expression.Eq((string)parentCol, parentId))
- .AddOrder(ord);
- if (!full) { criteria.Add(Expression.Eq("IsPublic", 1)); }
- objList = criteria.SetFirstResult(start).SetMaxResults(offset).List();
-
- tx.Commit();
- }
- catch (HibernateException e)
- {
- HandleException(e);
- }
- finally
- {
- session.Close();
- }
-
- return objList;
- }
-
- /// <summary>
- /// ???????
- /// </summary>
- /// <param name="clazz"></param>
- /// <param name="ord"></param>
- /// <param name="full"></param>
- /// <param name="exp"></param>
- /// <returns></returns>
- protected IList FindAll(System.Type clazz, Order ord,IList<ICriterion> exp)
- {
- IList objList = null;
- try
- {
- StartOperation();
- //????
- ICriteria criteria = session.CreateCriteria(clazz);
- foreach (ICriterion ex in exp)
- {
- criteria.Add(ex);
- }
- criteria.AddOrder(ord);
- objList = criteria.List();
-
- tx.Commit();
- }
- catch (HibernateException e)
- {
- HandleException(e);
- }
- finally
- {
- session.Close();
- }
-
- return objList;
- }
-
- ///// <summary>
- ///// ???HQL??,???Dictionary<>????
- ///// </summary>
- ///// <param name="HQL">HQL??</param>
- ///// <param name="parameters">???</param>
- ///// <returns></returns>
- //public IList FindAll(string HQL, Dictionary<string,string> parameters)
- //{
- // IList objList = null;
- // try
- // {
- // IQuery query = session.CreateQuery(HQL);
-
- // foreach (string parm in parameters.Keys)
- // {
- // query.SetParameter(parm, parameters[parm]);
- // }
-
- // objList = query.List();
-
- // }
- // catch (HibernateException e)
- // {
- // HandleException(e);
- // }
- // finally
- // {
- // session.Close();
- // }
-
- // return objList;
- //}
-
- ///// <summary>
- ///// QBE(Example??)
- ///// </summary>
- ///// <param name="clazz"></param>
- ///// <param name="obj"></param>
- ///// <param name="ordCol"></param>
- ///// <param name="Asc"></param>
- ///// <returns></returns>
- //protected IList FindExample(System.Type clazz, Object obj, Object ordCol, Boolean Asc)
- //{
- // IList objList = null;
- // Order ord = new Order((String)ordCol, Asc);
- // try
- // {
- // StartOperation();
- // //????Example??,??????????
- // //?????????????????
- // Example example = Example.Create(obj)
- // .EnableLike()
- // .IgnoreCase()
- // .SetEscapeCharacter('&');
-
- // objList = session.CreateCriteria(clazz)
- // .Add(example)
- // .List();
- // tx.Commit();
- // }
- // catch (HibernateException e)
- // {
- // HandleException(e);
- // }
- // finally
- // {
- // session.Close();
- // }
-
- // return objList;
- //}
-
- #endregion
-
- /// <summary>
- /// ??NH??
- /// </summary>
- protected void StartOperation()
- {
- this.session = NHibernateFactory.OpenSession();
- this.tx = session.BeginTransaction();
- }
-
- protected void HandleException(HibernateException e)
- {
- if(tx!=null) tx.Rollback();
- log4net.Config.BasicConfigurator.Configure();
- ////throw e;
- //if (log.IsErrorEnabled)
- //{
- // log.Error(e.Message);
- //}
- if (log.IsInfoEnabled) log.Info(e);
- throw new Exception("NHibernate????,??????????");
- }
- }
- }