PageRenderTime 45ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/n3c/N3C.DAO/AbstractDAO.cs

http://3rgbcom.googlecode.com/
C# | 485 lines | 273 code | 40 blank | 172 comment | 10 complexity | 92038f70bb574f96f81854f85f9a6ff6 MD5 | raw file
Possible License(s): AGPL-3.0, LGPL-2.1
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using NHibernate;
  5. using NHibernate.Criterion;
  6. using log4net;
  7. /*
  8. * ??????????
  9. * http://www.cnblogs.com/bluesky521/archive/2008/03/18/1111889.html
  10. * ????????????????
  11. *
  12. */
  13. namespace N3C.DAO
  14. {
  15. public abstract class AbstractDAO
  16. {
  17. protected ISession session;
  18. protected ITransaction tx;
  19. private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  20. /*
  21. * ????,??????????(FOR SQLITE)
  22. */
  23. #region CUD??
  24. protected void Save(Object obj)
  25. {
  26. try
  27. {
  28. StartOperation();
  29. session.Save(obj);
  30. tx.Commit();
  31. }
  32. catch (HibernateException e)
  33. {
  34. HandleException(e);
  35. }
  36. finally
  37. {
  38. session.Close();
  39. }
  40. }
  41. /// <summary>
  42. /// ??????
  43. /// </summary>
  44. /// <param name="list"></param>
  45. protected void Save(List<Object> list)
  46. {
  47. try
  48. {
  49. StartOperation();
  50. foreach (Object li in list)
  51. {
  52. session.Save(li);
  53. }
  54. tx.Commit();
  55. }
  56. catch (HibernateException e)
  57. {
  58. HandleException(e);
  59. }
  60. finally
  61. {
  62. session.Close();
  63. }
  64. }
  65. protected void Update(Object obj)
  66. {
  67. try
  68. {
  69. StartOperation();
  70. session.Update(obj);
  71. tx.Commit();
  72. }
  73. catch (HibernateException e)
  74. {
  75. HandleException(e);
  76. }
  77. finally
  78. {
  79. session.Close();
  80. }
  81. }
  82. protected void Delete(Object obj)
  83. {
  84. try
  85. {
  86. StartOperation();
  87. session.Delete(obj);
  88. tx.Commit();
  89. }
  90. catch (HibernateException e)
  91. {
  92. HandleException(e);
  93. }
  94. finally
  95. {
  96. session.Close();
  97. }
  98. }
  99. #endregion
  100. #region ????
  101. /// <summary>
  102. /// ??????
  103. /// </summary>
  104. /// <param name="clazz">????</param>
  105. /// <param name="id">??ID</param>
  106. /// <returns></returns>
  107. protected Object Find(System.Type clazz, Object id)
  108. {
  109. Object obj = null;
  110. try
  111. {
  112. StartOperation();
  113. obj = session.Get(clazz, id);
  114. tx.Commit();
  115. }
  116. catch (HibernateException e)
  117. {
  118. HandleException(e);
  119. }
  120. finally
  121. {
  122. session.Close();
  123. }
  124. return obj;
  125. }
  126. /// <summary>
  127. /// ????/????
  128. /// </summary>
  129. /// <param name="clazz"></param>
  130. /// <param name="ord"></param>
  131. /// <param name="Max">true:????false:???</param>
  132. /// <param name="exp"></param>
  133. /// <returns></returns>
  134. protected Object Find(System.Type clazz, Order ord, Boolean Max, IList<ICriterion> exp)
  135. {
  136. IList objList = null;
  137. try
  138. {
  139. StartOperation();
  140. //????
  141. ICriteria criteria = session.CreateCriteria(clazz);
  142. if (null != exp)
  143. {
  144. foreach (ICriterion ex in exp)
  145. {
  146. criteria.Add(ex);
  147. }
  148. }
  149. criteria.AddOrder(ord).SetFirstResult(0).SetMaxResults(1);
  150. objList = criteria.List();
  151. tx.Commit();
  152. }
  153. catch (HibernateException e)
  154. {
  155. HandleException(e);
  156. }
  157. finally
  158. {
  159. session.Close();
  160. }
  161. return objList.Count > 0 ? (Object)objList[0] : null ;
  162. }
  163. /// <summary>
  164. /// ??????????
  165. /// </summary>
  166. /// <param name="clazz">????</param>
  167. /// <param name="id">???ID</param>
  168. /// <param name="ordCol">??????</param>
  169. /// <param name="preNext">true:????false:???</param>
  170. /// <param name="full">?????</param>
  171. /// <returns></returns>
  172. protected Object Find(System.Type clazz, Object id,Object ordCol, Boolean preNext,Boolean full)
  173. {
  174. //IList objList = null;
  175. Order ord = new Order((string)ordCol, !preNext);
  176. IList<ICriterion> exp = new List<ICriterion>();
  177. exp.Add((preNext) ? Expression.Lt((string)ordCol, id) : Expression.Gt((string)ordCol, id));
  178. if (!full) { exp.Add(Expression.Eq("IsPublic", 1)); }
  179. return this.Find(clazz, ord, preNext, exp);
  180. }
  181. /// <summary>
  182. /// ??????(??/??)
  183. /// </summary>
  184. /// <param name="clazz">????</param>
  185. /// <param name="ordCol">????</param>
  186. /// <param name="Asc">????(true:??/fase:??)</param>
  187. /// <returns></returns>
  188. protected IList FindAll(System.Type clazz, Object ordCol, Boolean Asc, Boolean full)
  189. {
  190. //IList objList = null;
  191. Order ord = new Order((string)ordCol, Asc);
  192. IList<ICriterion> exp = new List<ICriterion>();
  193. if (!full) { exp.Add(Expression.Eq("IsPublic", 1)); }
  194. return this.FindAll(clazz, ord, exp);
  195. }
  196. /// <summary>
  197. /// ???????????(??/??)
  198. /// </summary>
  199. /// <param name="parentCol">???????</param>
  200. /// <param name="parentId">???</param>
  201. /// <param name="clazz">????</param>
  202. /// <param name="ordCol">????</param>
  203. /// <param name="Asc">????(true:??/fase:??)</param>
  204. /// <returns></returns>
  205. protected IList FindAll(System.Type clazz, Object parentCol, Object parentId, Object ordCol, Boolean Asc, Boolean full)
  206. {
  207. //IList objList = null;
  208. Order ord = new Order((string)ordCol, Asc);
  209. IList<ICriterion> exp = new List<ICriterion>();
  210. exp.Add(Expression.Eq((string)parentCol, parentId));
  211. if (!full) { exp.Add(Expression.Eq("IsPublic", 1)); }
  212. return this.FindAll(clazz, ord, exp);
  213. }
  214. /// <summary>
  215. /// ????????????(????)
  216. /// </summary>
  217. /// <param name="clazz">????</param>
  218. /// <param name="start">?????</param>
  219. /// <param name="offset">?????</param>
  220. /// <param name="ordCol">????</param>
  221. /// <param name="Asc">????(true:??/false:??)</param>
  222. /// <param name="TotalCount">??(???)</param>
  223. /// <returns></returns>
  224. protected IList FindAll(System.Type clazz, int start, int offset, string ordCol, Boolean Asc, Boolean full, out int TotalCount)
  225. {
  226. IList objList = null;
  227. Order ord = new Order((string)ordCol, Asc);
  228. Object objCount = null;
  229. try
  230. {
  231. StartOperation();
  232. ICriteria criteria = session.CreateCriteria(clazz);
  233. if (!full) { criteria.Add(Expression.Eq("IsPublic", 1)); }
  234. //??????
  235. objCount = criteria.SetProjection(Projections.Count((string)ordCol)).UniqueResult();
  236. criteria.SetProjection(null);
  237. //????
  238. objList = criteria.AddOrder(ord)
  239. .SetFirstResult(start).SetMaxResults(offset)
  240. .List();
  241. tx.Commit();
  242. }
  243. catch (HibernateException e)
  244. {
  245. HandleException(e);
  246. }
  247. finally
  248. {
  249. session.Close();
  250. }
  251. Int32.TryParse(objCount.ToString(),out TotalCount);
  252. return objList;
  253. }
  254. /// <summary>
  255. /// ????????????(????)
  256. /// </summary>
  257. /// <param name="clazz">????</param>
  258. /// <param name="start">?????</param>
  259. /// <param name="offset">?????</param>
  260. /// <param name="ordCol">????</param>
  261. /// <param name="Asc">????(true:??/false:??)</param>
  262. /// <returns></returns>
  263. protected IList FindAll(System.Type clazz, int start, int offset, string ordCol, Boolean Asc, Boolean full)
  264. {
  265. IList objList = null;
  266. Order ord = new Order((string)ordCol, Asc);
  267. try
  268. {
  269. StartOperation();
  270. //????
  271. ICriteria criteria = session.CreateCriteria(clazz)
  272. .AddOrder(ord);
  273. if (!full) { criteria.Add(Expression.Eq("IsPublic", 1)); }
  274. objList = criteria.SetFirstResult(start).SetMaxResults(offset).List();
  275. tx.Commit();
  276. }
  277. catch (HibernateException e)
  278. {
  279. HandleException(e);
  280. }
  281. finally
  282. {
  283. session.Close();
  284. }
  285. return objList;
  286. }
  287. /// <summary>
  288. /// ????????????
  289. /// (?????,??????????,??????????)
  290. /// </summary>
  291. /// <param name="clazz">????</param>
  292. /// <param name="byColName">???????</param>
  293. /// <param name="CategoryId">?????</param>
  294. /// <param name="start">?????</param>
  295. /// <param name="offset">?????</param>
  296. /// <param name="ordCol">????</param>
  297. /// <param name="Asc">????(true:??/false:??)</param>
  298. /// <returns></returns>
  299. protected IList FindAll(System.Type clazz, Object parentCol, Object parentId, int start, int offset,
  300. string ordCol, Boolean Asc, Boolean full)
  301. {
  302. IList objList = null;
  303. Order ord = new Order(ordCol, Asc);
  304. try
  305. {
  306. StartOperation();
  307. //????
  308. ICriteria criteria = session.CreateCriteria(clazz)
  309. .Add(Expression.Eq((string)parentCol, parentId))
  310. .AddOrder(ord);
  311. if (!full) { criteria.Add(Expression.Eq("IsPublic", 1)); }
  312. objList = criteria.SetFirstResult(start).SetMaxResults(offset).List();
  313. tx.Commit();
  314. }
  315. catch (HibernateException e)
  316. {
  317. HandleException(e);
  318. }
  319. finally
  320. {
  321. session.Close();
  322. }
  323. return objList;
  324. }
  325. /// <summary>
  326. /// ???????
  327. /// </summary>
  328. /// <param name="clazz"></param>
  329. /// <param name="ord"></param>
  330. /// <param name="full"></param>
  331. /// <param name="exp"></param>
  332. /// <returns></returns>
  333. protected IList FindAll(System.Type clazz, Order ord,IList<ICriterion> exp)
  334. {
  335. IList objList = null;
  336. try
  337. {
  338. StartOperation();
  339. //????
  340. ICriteria criteria = session.CreateCriteria(clazz);
  341. foreach (ICriterion ex in exp)
  342. {
  343. criteria.Add(ex);
  344. }
  345. criteria.AddOrder(ord);
  346. objList = criteria.List();
  347. tx.Commit();
  348. }
  349. catch (HibernateException e)
  350. {
  351. HandleException(e);
  352. }
  353. finally
  354. {
  355. session.Close();
  356. }
  357. return objList;
  358. }
  359. ///// <summary>
  360. ///// ???HQL??,???Dictionary<>????
  361. ///// </summary>
  362. ///// <param name="HQL">HQL??</param>
  363. ///// <param name="parameters">???</param>
  364. ///// <returns></returns>
  365. //public IList FindAll(string HQL, Dictionary<string,string> parameters)
  366. //{
  367. // IList objList = null;
  368. // try
  369. // {
  370. // IQuery query = session.CreateQuery(HQL);
  371. // foreach (string parm in parameters.Keys)
  372. // {
  373. // query.SetParameter(parm, parameters[parm]);
  374. // }
  375. // objList = query.List();
  376. // }
  377. // catch (HibernateException e)
  378. // {
  379. // HandleException(e);
  380. // }
  381. // finally
  382. // {
  383. // session.Close();
  384. // }
  385. // return objList;
  386. //}
  387. ///// <summary>
  388. ///// QBE(Example??)
  389. ///// </summary>
  390. ///// <param name="clazz"></param>
  391. ///// <param name="obj"></param>
  392. ///// <param name="ordCol"></param>
  393. ///// <param name="Asc"></param>
  394. ///// <returns></returns>
  395. //protected IList FindExample(System.Type clazz, Object obj, Object ordCol, Boolean Asc)
  396. //{
  397. // IList objList = null;
  398. // Order ord = new Order((String)ordCol, Asc);
  399. // try
  400. // {
  401. // StartOperation();
  402. // //????Example??,??????????
  403. // //?????????????????
  404. // Example example = Example.Create(obj)
  405. // .EnableLike()
  406. // .IgnoreCase()
  407. // .SetEscapeCharacter('&');
  408. // objList = session.CreateCriteria(clazz)
  409. // .Add(example)
  410. // .List();
  411. // tx.Commit();
  412. // }
  413. // catch (HibernateException e)
  414. // {
  415. // HandleException(e);
  416. // }
  417. // finally
  418. // {
  419. // session.Close();
  420. // }
  421. // return objList;
  422. //}
  423. #endregion
  424. /// <summary>
  425. /// ??NH??
  426. /// </summary>
  427. protected void StartOperation()
  428. {
  429. this.session = NHibernateFactory.OpenSession();
  430. this.tx = session.BeginTransaction();
  431. }
  432. protected void HandleException(HibernateException e)
  433. {
  434. if(tx!=null) tx.Rollback();
  435. log4net.Config.BasicConfigurator.Configure();
  436. ////throw e;
  437. //if (log.IsErrorEnabled)
  438. //{
  439. // log.Error(e.Message);
  440. //}
  441. if (log.IsInfoEnabled) log.Info(e);
  442. throw new Exception("NHibernate????,??????????");
  443. }
  444. }
  445. }