分享

Hibernate 增删改查 基于HibernateTemplate

 Riley2222 2012-09-05

Hibernate 增删改查

 

package com.abin.ssh.bean;

import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class UsersDAO extends HibernateDaoSupport {
 private static final Log log = LogFactory.getLog(UsersDAO.class);
 // property constants
 public static final String FAMILY = "family";
 public static final String NAME = "name";
 public static final String AGE = "age";

 protected void initDao() {
  // do nothing
 }

 public void save(Users transientInstance) {
  log.debug("saving Users instance");
  try {
   getHibernateTemplate().save(transientInstance);
   log.debug("save successful");
  } catch (RuntimeException re) {
   log.error("save failed", re);
   throw re;
  }
 }

 public void delete(Users persistentInstance) {
  log.debug("deleting Users instance");
  try {
   getHibernateTemplate().delete(persistentInstance);
   log.debug("delete successful");
  } catch (RuntimeException re) {
   log.error("delete failed", re);
   throw re;
  }
 }

 public Users findById(java.lang.Integer id) {
  log.debug("getting Users instance with id: " + id);
  try {
   Users instance = (Users) getHibernateTemplate().get(
     "com.abin.ssh.bean.Users", id);
   return instance;
  } catch (RuntimeException re) {
   log.error("get failed", re);
   throw re;
  }
 }

 public List findByExample(Users instance) {
  log.debug("finding Users instance by example");
  try {
   List results = getHibernateTemplate().findByExample(instance);
   log.debug("find by example successful, result size: "
     + results.size());
   return results;
  } catch (RuntimeException re) {
   log.error("find by example failed", re);
   throw re;
  }
 }

 public List findByProperty(String propertyName, Object value) {
  log.debug("finding Users instance with property: " + propertyName
    + ", value: " + value);
  try {
   String queryString = "from Users as model where model."
     + propertyName + "= ?";
   return getHibernateTemplate().find(queryString, value);
  } catch (RuntimeException re) {
   log.error("find by property name failed", re);
   throw re;
  }
 }

 public List findByFamily(Object family) {
  return findByProperty(FAMILY, family);
 }

 public List findByName(Object name) {
  return findByProperty(NAME, name);
 }

 public List findByAge(Object age) {
  return findByProperty(AGE, age);
 }

 public List findAll() {
  log.debug("finding all Users instances");
  try {
   String queryString = "from Users";
   return getHibernateTemplate().find(queryString);
  } catch (RuntimeException re) {
   log.error("find all failed", re);
   throw re;
  }
 }

 public Users merge(Users detachedInstance) {
  log.debug("merging Users instance");
  try {
   Users result = (Users) getHibernateTemplate().merge(
     detachedInstance);
   log.debug("merge successful");
   return result;
  } catch (RuntimeException re) {
   log.error("merge failed", re);
   throw re;
  }
 }

 public void attachDirty(Users instance) {
  log.debug("attaching dirty Users instance");
  try {
   getHibernateTemplate().saveOrUpdate(instance);
   log.debug("attach successful");
  } catch (RuntimeException re) {
   log.error("attach failed", re);
   throw re;
  }
 }

 public void attachClean(Users instance) {
  log.debug("attaching clean Users instance");
  try {
   getHibernateTemplate().lock(instance, LockMode.NONE);
   log.debug("attach successful");
  } catch (RuntimeException re) {
   log.error("attach failed", re);
   throw re;
  }
 }

 public static UsersDAO getFromApplicationContext(ApplicationContext ctx) {
  return (UsersDAO) ctx.getBean("UsersDAO");
 }
}



================================================================================================

  1.  /**  
  2. * 向数据库添加一条对应于一个业务对象实例的记录  
  3.  
  4. * @param entity  
  5. * 业务对象实例  
  6.       */   
  7. public Entity create(Entity entity) throws DaoException {   
  8. try {   
  9. getHibernateTemplate().save(entity);   
  10. return entity;   
  11. catch (DataAccessException e) {   
  12.             throw new DaoException("保存 " + entity.getClass().getName()   
  13. " 实例到数据库失败", e);   
  14. }   
  15. }   
  16.   
  17. /**  
  18. * 向数据库更新一条对应于一个业务对象实例的记录  
  19.  
  20. * @param entity  
  21.       * 业务对象实例  
  22.       */   
  23. public void update(Entity entity) throws DaoException {   
  24. try {   
  25. getHibernateTemplate().update(entity);   
  26. catch (DataAccessException e) {   
  27.             throw new DaoException("更新 " + entity.getClass().getName()   
  28. " 实例到数据库失败", e);   
  29. }   
  30. }   
  31.   
  32. /**  
  33. * 从数据库删除一条对应于一个业务对象的记录  
  34.  
  35. * @param entity  
  36. * 业务对象实例  
  37.       */   
  38. public void delete(Entity entity) throws DaoException {   
  39. try {   
  40. getHibernateTemplate().delete(entity);   
  41. catch (DataAccessException e) {   
  42.             throw new DaoException("从数据库删除 " + entity.getClass().getName()   
  43. " 实例失败", e);   
  44. }   
  45. }   
  46.   
  47. /**  
  48. * 从数据库删除所有对应于一个业务对象的记录  
  49.  
  50. * @param clazz  
  51. * 指定类型的业务对象  
  52.       */   
  53. public void deleteAll(Class clazz) throws DaoException {   
  54. try {   
  55. List result = getHibernateTemplate().loadAll(clazz);
  56. //如果这里的clazz里面有其他对象的引用则不可以这样直接删除,必须先把里面的引用删除掉之后才可以删除该对象   
  57. getHibernateTemplate().deleteAll(result);   
  58. catch (DataAccessException e) {   
  59. log.error("从数据库删除 " + clazz.getName() + " 的所有记录失败", e);   
  60. throw new DaoException("从数据库删除 " + clazz.getName() + " 的所有记录失败", e);   
  61. }   
  62. }   
  63.   
  64. public void deleteAll(Collection entities) throws DaoException {   
  65. try {   
  66. getHibernateTemplate().deleteAll(entities);   
  67. catch(DataAccessException e) {   
  68. throw new DaoException(e);   
  69. }   
  70. }   
  71.   
  72. /**  
  73. * 根据关键字从数据库加载指定类型的业务对象。  
  74.  
  75. * @param clazz  
  76. * 业务对象的Class  
  77. * @param keyName  
  78. * 指定关键字对应的字段名称  
  79. * @param keyValue  
  80. * 指定关键字的值  
  81. * @return <ul>  
  82. * <li>当关键字唯一并存在该记录时,返回该记录对应的业务对象</li>  
  83. * <li>当关键字不唯一,返回查询结果的第一条记录所对应的业务对象</li>  
  84. * <li>当不存在该记录时,返回null</li>  
  85.       */   
  86. public Object loadByKey(Class clazz, String keyName, Object keyValue)   
  87. throws DaoException {   
  88. try {   
  89. List result = getHibernateTemplate().find(   
  90. "from " + clazz.getName() + " where " + keyName + " = ?",   
  91. keyValue);   
  92. if (result != null && result.size() > 0) {   
  93. return result.get(0);   
  94. else {   
  95. return null;   
  96. }   
  97. catch (DataAccessException e) {   
  98.             throw new DaoException("加载 " + keyName + " 为 " + keyValue + " 的 "   
  99. + clazz.getName() + " 实例失败", e);   
  100. }   
  101. }   
  102.   
  103. /**  
  104. * 从数据库加载指定类型的业务对象的所有记录。  
  105.  
  106. * @param clazz  
  107. * 业务对象的Class  
  108. * @return 返回数据库中对应该业务对象的所有记录的集合  
  109.       */   
  110. public List loadAll(Class clazz) throws DaoException {   
  111. try {   
  112. return getHibernateTemplate().loadAll(clazz);   
  113. catch (DataAccessException e) {   
  114.             throw new DaoException("加载所有 " + clazz.getName() + " 实例时失败", e);   
  115. }   
  116. }   
  117.   
  118. /**  
  119. * 根据查询语句查询数据库并返回查询结果所包含的业务对象集合。  
  120.  
  121. * @param queryString  
  122. * 指定查询语句  
  123. * @return 返回查询结果包含的业务对象集合  
  124.       */   
  125. public List find(String queryString) throws DaoException {   
  126. try {   
  127. return getHibernateTemplate().find(queryString);   
  128. catch (DataAccessException e) {   
  129.             throw new DaoException("执行查询 " + queryString + " 失败", e);   
  130. }   
  131. }   
  132.   
  133. /**  
  134. * 根据带一个参数的查询语句查询数据库并返回查询结果所包含的业务对象集合。  
  135.  
  136. * @param queryString  
  137. * 指定查询语句  
  138. * @param param  
  139. * 指定所带参数  
  140. * @return 返回查询结果包含的业务对象集合  
  141.       */   
  142. public List find(String queryString, Object param) throws DaoException {   
  143. try {   
  144. return getHibernateTemplate().find(queryString, param);   
  145. catch (DataAccessException e) {   
  146.             throw new DaoException("执行参数为 " + param + " 的查询 " + queryString   
  147. " 失败", e);   
  148. }   
  149. }   
  150.   
  151. /**  
  152. * 根据带多个参数的查询语句查询数据库并返回查询结果所包含的业务对象集合。  
  153.  
  154. * @param queryString  
  155. * 指定查询语句  
  156. * @param params  
  157. * 指定参数数组  
  158. * @return 返回查询结果包含的业务对象集合  
  159.       */   
  160. public List find(String queryString, Object[] params) throws DaoException {   
  161. try {   
  162. return getHibernateTemplate().find(queryString, params);   
  163. catch (DataAccessException e) {   
  164. StringBuffer paramString = new StringBuffer("");   
  165. for (int i = 0; i < params.length; i++) {   
  166. paramString.append(params[i]);   
  167. paramString.append(" ");   
  168. }   
  169.             throw new DaoException("执行参数为 " + paramString + "的查询 "   
  170. + queryString + " 失败", e);   
  171. }   
  172. }   
  173.   
  174. /**  
  175. * 根据已定义的查询语句查询数据库并返回查询结果所包含的业务对象集合。  
  176.  
  177. * @param queryName  
  178. * 已定义查询语句的名称  
  179. * @return 返回查询结果包含的业务对象集合  
  180.       */   
  181. public List findByNamedQuery(String queryName) throws DaoException {   
  182. try {   
  183. return getHibernateTemplate().findByNamedQuery(queryName);   
  184. catch (DataAccessException e) {   
  185.             throw new DaoException("执行命名为 " + queryName + " 的查询失败");   
  186. }   
  187. }   
  188.   
  189. /**  
  190. * 根据已定义的带一个参数的查询语句查询数据库并返回查询结果所包含的业务对象集合。  
  191.  
  192. * @param queryName  
  193. * 已定义查询语句的名称  
  194. * @param param  
  195. * 指定的参数  
  196. * @return 返回查询结果包含的业务对象集合  
  197.       */   
  198. public List findByNamedQuery(String queryName, Object param)   
  199. throws DaoException {   
  200. try {   
  201. return getHibernateTemplate().findByNamedQuery(queryName, param);   
  202. catch (DataAccessException e) {   
  203.             throw new DaoException("执行参数为 " + param + " 命名为 " + queryName   
  204. " 的查询失败");   
  205. }   
  206. }   
  207.   
  208. /**  
  209. * 根据已定义的带多个参数的查询语句查询数据库并返回查询结果所包含的业务对象集合。  
  210.  
  211. * @param queryName  
  212. * 已定义查询语句的名称  
  213. * @param params  
  214. * 指定的参数数组  
  215. * @return 返回查询结果包含的业务对象集合  
  216.       */   
  217. public List findByNameQuery(String queryName, Object[] params)   
  218. throws DaoException {   
  219. try {   
  220. return getHibernateTemplate().findByNamedQuery(queryName, params);   
  221. catch (DataAccessException e) {   
  222. StringBuffer paramString = new StringBuffer("");   
  223. for (int i = 0; i < params.length; i++) {   
  224. paramString.append(params[i]);   
  225. paramString.append(" ");   
  226. }   
  227.             throw new DaoException("执行参数为 " + paramString + "命名为 " + queryName   
  228. " 的查询失败");   
  229. }   
  230. }  

HibernateTemplate 提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring 2.0 更增加对命名 SQL 查询的支持,也增加对分页的支持。大部分情况下,使用 Hibernate 的常规用法,就可完成大多数 DAO 对象的 CRUD 操作。下面是 HibernateTemplate 的常用方法简介:

q      void delete(Object entity) :删除指定持久化实例

q      deleteAll(Collection entities) :删除集合内全部持久化类实例

q      find(String queryString) :根据 HQL 查询字符串来返回实例集合

q      findByNamedQuery(String queryName) :根据命名查询返回实例集合

q      get(Class entityClass, Serializable id) :根据主键加载特定持久化类的实例

q      save(Object entity) :保存新的实例

q      saveOrUpdate(Object entity) :根据实例状态,选择保存或者更新

q      update(Object entity) :更新实例的状态,要求 entity 是持久状态

q      setMaxResults(int maxResults) :设置分页的大小

Java代码  收藏代码
  1.   

Hibernate 的复杂用法 HibernateCallback

HibernateTemplate 还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用 Hibernate 的操作方式。 HibernateTemplate 的灵活访问方式是通过如下两个方法完成:

q      Object execute(HibernateCallback action)

q      List execute(HibernateCallback action)

这两个方法都需要一个 HibernateCallback 的实例, HibernateCallback 实例可在任何有效的 Hibernate 数据访问中使用。程序开发者通过 HibernateCallback ,可以完全使用 Hibernate 灵活的方式来访问数据库,解决Spring 封装 Hibernate 后灵活性不足的缺陷。 HibernateCallback 是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session) ,该方法只有一个参数 Session 

通常,程序中采用实现 HibernateCallback 的匿名内部类来获取 HibernateCallback 的实例,方法doInHibernate 的方法体就是 Spring 执行的持久化操作



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多