ISimpleHibernateDao.java 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. package com.key.common.dao;
  2. import java.io.Serializable;
  3. import java.util.Collection;
  4. import java.util.List;
  5. import java.util.Map;
  6. import org.hibernate.Criteria;
  7. import org.hibernate.Query;
  8. import org.hibernate.Session;
  9. import org.hibernate.SessionFactory;
  10. import org.hibernate.criterion.Criterion;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. public interface ISimpleHibernateDao<T, ID extends Serializable> {
  13. /**
  14. * 取得sessionFactory.
  15. */
  16. public abstract SessionFactory getSessionFactory();
  17. /**
  18. * 采用@Autowired按类型注入SessionFactory, 当有多个SesionFactory的时候在子类重载本函数.
  19. */
  20. @Autowired
  21. public abstract void setSessionFactory(final SessionFactory sessionFactory);
  22. /**
  23. * 取得当前Session.
  24. */
  25. public abstract Session getSession();
  26. /**
  27. * 保存新增或修改的对象.
  28. */
  29. public abstract void save(final T entity);
  30. /**
  31. * 删除对象.
  32. *
  33. * @param entity 对象必须是session中的对象或含id属性的transient对象.
  34. */
  35. public abstract void delete(final T entity);
  36. /**
  37. * 按id删除对象.
  38. */
  39. public abstract void delete(final ID id);
  40. /**
  41. * 按id获取对象.
  42. */
  43. public abstract T get(final ID id);
  44. /**
  45. * 按id列表获取对象列表.
  46. */
  47. public abstract List<T> get(final Collection<ID> ids);
  48. /**
  49. * 获取全部对象.
  50. */
  51. public abstract List<T> getAll();
  52. /**
  53. * 获取全部对象, 支持按属性行序.
  54. */
  55. public abstract List<T> getAll(String orderByProperty, boolean isAsc);
  56. /**
  57. * 按属性查找对象列表, 匹配方式为相等.
  58. */
  59. public abstract List<T> findBy(final String propertyName, final Object value);
  60. /**
  61. * 按属性查找唯一对象, 匹配方式为相等.
  62. */
  63. public abstract T findUniqueBy(final String propertyName, final Object value);
  64. /**
  65. * 按HQL查询对象列表.
  66. *
  67. * @param values 数量可变的参数,按顺序绑定.
  68. */
  69. public abstract <X> List<X> find(final String hql, final Object... values);
  70. /**
  71. * 按HQL查询对象列表.
  72. *
  73. * @param values 命名参数,按名称绑定.
  74. */
  75. public abstract <X> List<X> find(final String hql,
  76. final Map<String, ?> values);
  77. /**
  78. * 按HQL查询唯一对象.
  79. *
  80. * @param values 数量可变的参数,按顺序绑定.
  81. */
  82. public abstract <X> X findUnique(final String hql, final Object... values);
  83. /**
  84. * 按HQL查询唯一对象.
  85. *
  86. * @param values 命名参数,按名称绑定.
  87. */
  88. public abstract <X> X findUnique(final String hql,
  89. final Map<String, ?> values);
  90. /**
  91. * 执行HQL进行批量修改/删除操作.
  92. *
  93. * @param values 数量可变的参数,按顺序绑定.
  94. * @return 更新记录数.
  95. */
  96. public abstract int batchExecute(final String hql, final Object... values);
  97. /**
  98. * 执行HQL进行批量修改/删除操作.
  99. *
  100. * @param values 命名参数,按名称绑定.
  101. * @return 更新记录数.
  102. */
  103. public abstract int batchExecute(final String hql,
  104. final Map<String, ?> values);
  105. /**
  106. * 根据查询HQL与参数列表创建Query对象.
  107. * 与find()函数可进行更加灵活的操作.
  108. *
  109. * @param values 数量可变的参数,按顺序绑定.
  110. */
  111. public abstract Query createQuery(final String queryString,
  112. final Object... values);
  113. /**
  114. * 根据查询HQL与参数列表创建Query对象.
  115. * 与find()函数可进行更加灵活的操作.
  116. *
  117. * @param values 命名参数,按名称绑定.
  118. */
  119. public abstract Query createQuery(final String queryString,
  120. final Map<String, ?> values);
  121. /**
  122. * 按Criteria查询对象列表.
  123. *
  124. * @param criterions 数量可变的Criterion.
  125. */
  126. public abstract List<T> find(final Criterion... criterions);
  127. /**
  128. * 按Criteria查询唯一对象.
  129. *
  130. * @param criterions 数量可变的Criterion.
  131. */
  132. public abstract T findUnique(final Criterion... criterions);
  133. /**
  134. * 根据Criterion条件创建Criteria.
  135. * 与find()函数可进行更加灵活的操作.
  136. *
  137. * @param criterions 数量可变的Criterion.
  138. */
  139. public abstract Criteria createCriteria(final Criterion... criterions);
  140. /**
  141. * @param criterions
  142. * @return
  143. */
  144. public Criteria createCriteria(List<Criterion> criterions);
  145. /**
  146. * 初始化对象.
  147. * 使用load()方法得到的仅是对象Proxy, 在传到View层前需要进行初始化.
  148. * 如果传入entity, 则只初始化entity的直接属性,但不会初始化延迟加载的关联集合和属性.
  149. * 如需初始化关联属性,需执行:
  150. * Hibernate.initialize(user.getRoles()),初始化User的直接属性和关联集合.
  151. * Hibernate.initialize(user.getDescription()),初始化User的直接属性和延迟加载的Description属性.
  152. */
  153. public abstract void initProxyObject(Object proxy);
  154. /**
  155. * Flush当前Session.
  156. */
  157. public abstract void flush();
  158. /**
  159. * 为Query添加distinct transformer.
  160. * 预加载关联对象的HQL会引起主对象重复, 需要进行distinct处理.
  161. */
  162. public abstract Query distinct(Query query);
  163. /**
  164. * 为Criteria添加distinct transformer.
  165. * 预加载关联对象的HQL会引起主对象重复, 需要进行distinct处理.
  166. */
  167. public abstract Criteria distinct(Criteria criteria);
  168. /**
  169. * 取得对象的主键名.
  170. */
  171. public abstract String getIdName();
  172. /**
  173. * 判断对象的属性值在数据库内是否唯一.
  174. *
  175. * 在修改对象的情景下,如果属性新修改的值(value)等于属性原来的值(orgValue)则不作比较.
  176. */
  177. public abstract boolean isPropertyUnique(final String propertyName,
  178. final Object newValue, final Object oldValue);
  179. }