`
115893520
  • 浏览: 140560 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

HibernateTemplate类使用

阅读更多
 /** 
* 向数据库添加一条对应于一个业务对象实例的记录 
* 
* @param entity 
* 业务对象实例 
      */ 
public Entity create(Entity entity) throws DaoException { 
try { 
getHibernateTemplate().save(entity); 
return entity; 
} catch (DataAccessException e) { 
            throw new DaoException("保存 " + entity.getClass().getName() 
+ " 实例到数据库失败", e); 
} 
} 

/** 
* 向数据库更新一条对应于一个业务对象实例的记录 
* 
* @param entity 
      * 业务对象实例 
      */ 
public void update(Entity entity) throws DaoException { 
try { 
getHibernateTemplate().update(entity); 
} catch (DataAccessException e) { 
            throw new DaoException("更新 " + entity.getClass().getName() 
+ " 实例到数据库失败", e); 
} 
} 

/** 
* 从数据库删除一条对应于一个业务对象的记录 
* 
* @param entity 
* 业务对象实例 
      */ 
public void delete(Entity entity) throws DaoException { 
try { 
getHibernateTemplate().delete(entity); 
} catch (DataAccessException e) { 
            throw new DaoException("从数据库删除 " + entity.getClass().getName() 
+ " 实例失败", e); 
} 
} 

/** 
* 从数据库删除所有对应于一个业务对象的记录 
* 
* @param clazz 
* 指定类型的业务对象 
      */ 
public void deleteAll(Class clazz) throws DaoException { 
try { 
List result = getHibernateTemplate().loadAll(clazz); 
getHibernateTemplate().deleteAll(result); 
} catch (DataAccessException e) { 
log.error("从数据库删除 " + clazz.getName() + " 的所有记录失败", e); 
throw new DaoException("从数据库删除 " + clazz.getName() + " 的所有记录失败", e); 
} 
} 

public void deleteAll(Collection entities) throws DaoException { 
try { 
getHibernateTemplate().deleteAll(entities); 
} catch(DataAccessException e) { 
throw new DaoException(e); 
} 
} 

/** 
* 根据关键字从数据库加载指定类型的业务对象。 
* 
* @param clazz 
* 业务对象的Class 
* @param keyName 
* 指定关键字对应的字段名称 
* @param keyValue 
* 指定关键字的值 
* @return <ul> 
* <li>当关键字唯一并存在该记录时,返回该记录对应的业务对象</li> 
* <li>当关键字不唯一,返回查询结果的第一条记录所对应的业务对象</li> 
* <li>当不存在该记录时,返回null</li> 
      */ 
public Object loadByKey(Class clazz, String keyName, Object keyValue) 
throws DaoException { 
try { 
List result = getHibernateTemplate().find( 
"from " + clazz.getName() + " where " + keyName + " = ?", 
keyValue); 
if (result != null && result.size() > 0) { 
return result.get(0); 
} else { 
return null; 
} 
} catch (DataAccessException e) { 
            throw new DaoException("加载 " + keyName + " 为 " + keyValue + " 的 " 
+ clazz.getName() + " 实例失败", e); 
} 
} 

/** 
* 从数据库加载指定类型的业务对象的所有记录。 
* 
* @param clazz 
* 业务对象的Class 
* @return 返回数据库中对应该业务对象的所有记录的集合 
      */ 
public List loadAll(Class clazz) throws DaoException { 
try { 
return getHibernateTemplate().loadAll(clazz); 
} catch (DataAccessException e) { 
            throw new DaoException("加载所有 " + clazz.getName() + " 实例时失败", e); 
} 
} 

/** 
* 根据查询语句查询数据库并返回查询结果所包含的业务对象集合。 
* 
* @param queryString 
* 指定查询语句 
* @return 返回查询结果包含的业务对象集合 
      */ 
public List find(String queryString) throws DaoException { 
try { 
return getHibernateTemplate().find(queryString); 
} catch (DataAccessException e) { 
            throw new DaoException("执行查询 " + queryString + " 失败", e); 
} 
} 

/** 
* 根据带一个参数的查询语句查询数据库并返回查询结果所包含的业务对象集合。 
* 
* @param queryString 
* 指定查询语句 
* @param param 
* 指定所带参数 
* @return 返回查询结果包含的业务对象集合 
      */ 
public List find(String queryString, Object param) throws DaoException { 
try { 
return getHibernateTemplate().find(queryString, param); 
} catch (DataAccessException e) { 
            throw new DaoException("执行参数为 " + param + " 的查询 " + queryString 
+ " 失败", e); 
} 
} 

/** 
* 根据带多个参数的查询语句查询数据库并返回查询结果所包含的业务对象集合。 
* 
* @param queryString 
* 指定查询语句 
* @param params 
* 指定参数数组 
* @return 返回查询结果包含的业务对象集合 
      */ 
public List find(String queryString, Object[] params) throws DaoException { 
try { 
return getHibernateTemplate().find(queryString, params); 
} catch (DataAccessException e) { 
StringBuffer paramString = new StringBuffer(""); 
for (int i = 0; i < params.length; i++) { 
paramString.append(params[i]); 
paramString.append(" "); 
} 
            throw new DaoException("执行参数为 " + paramString + "的查询 " 
+ queryString + " 失败", e); 
} 
} 

/** 
* 根据已定义的查询语句查询数据库并返回查询结果所包含的业务对象集合。 
* 
* @param queryName 
* 已定义查询语句的名称 
* @return 返回查询结果包含的业务对象集合 
      */ 
public List findByNamedQuery(String queryName) throws DaoException { 
try { 
return getHibernateTemplate().findByNamedQuery(queryName); 
} catch (DataAccessException e) { 
            throw new DaoException("执行命名为 " + queryName + " 的查询失败"); 
} 
} 

/** 
* 根据已定义的带一个参数的查询语句查询数据库并返回查询结果所包含的业务对象集合。 
* 
* @param queryName 
* 已定义查询语句的名称 
* @param param 
* 指定的参数 
* @return 返回查询结果包含的业务对象集合 
      */ 
public List findByNamedQuery(String queryName, Object param) 
throws DaoException { 
try { 
return getHibernateTemplate().findByNamedQuery(queryName, param); 
} catch (DataAccessException e) { 
            throw new DaoException("执行参数为 " + param + " 命名为 " + queryName 
+ " 的查询失败"); 
} 
} 

/** 
* 根据已定义的带多个参数的查询语句查询数据库并返回查询结果所包含的业务对象集合。 
* 
* @param queryName 
* 已定义查询语句的名称 
* @param params 
* 指定的参数数组 
* @return 返回查询结果包含的业务对象集合 
      */ 
public List findByNameQuery(String queryName, Object[] params) 
throws DaoException { 
try { 
return getHibernateTemplate().findByNamedQuery(queryName, params); 
} catch (DataAccessException e) { 
StringBuffer paramString = new StringBuffer(""); 
for (int i = 0; i < params.length; i++) { 
paramString.append(params[i]); 
paramString.append(" "); 
} 
            throw new DaoException("执行参数为 " + paramString + "命名为 " + queryName 
+ " 的查询失败"); 
} 
}



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) :设置分页的大小


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 执行的持久化操作

分享到:
评论

相关推荐

    HibernateTemplate类的使用

    HibernateTemplate类的使用

    HibernateTemplate源代码

    HibernateTemplate源代码

    HibernateTemplate.saveOrUpdate时出现\xE7\x84十六进制之类的字符串

    HibernateTemplate.saveOrUpdate时出现\xE7\x84十六进制之类的字符串,连接数据库字符串,数据库字符集,汉字乱码的问题集合,还有我熬3夜的血泪经历

    MyEclipse 2014 使用hibernate3 生成数据库实体类 和 xml映射文件

    MyEclipse 2014 使用hibernate3 生成数据库实体类 和 xml映射文件

    第24次课-1 Spring与Hibernate的整合

    Spring提供了org.springframework.orm.hibernate3.HibernateTemplate类和org.springframework.orm.hibernate3.HibernateCallback接口来方便和Hibernate整合。 HibernateTemplate类封装了Hibernate的主要类,它提供了...

    AnyFo - Util - AnyFoDao :Spring + Hibernate整合通用的DAO层类

    本类封装了Spring提供的HibernateTemplate,从提供了对数据的各种操作,因此,本类尤其适合用Spring + Hibernate整合后进行系统开 发时使用。 AnyFoAction功能概述 AnyFoDao中的那个类,提供多个方法来对...

    Hibernate核心类和接口的详细介绍

    今天小编就为大家分享一篇关于Hibernate核心类和接口的详细介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    Spring_Hibernate集成

    * 继承HibernateDaoSupport类,使用HibernateTemplate来持久化,HibernateTemplate是 Hibernate Session的轻量级封装 * 默认情况下运行期异常才会回滚(包括继承了RuntimeException子类),普通异常是不会滚的 ...

    Spring整合Hibernate 详解.doc

    6.5 Spring整合Hibernate ...6.5.3 使用HibernateTemplate 6.5.4 使用HibernateCallBack 6.5.6 使用IoC容器组装各种组件 6.5.7启动web容器读取xml配置文件 6.5.8了解继承自HibernateDaoSupport类DAO

    Hibernate使用技巧汇总

    } } &lt;br&gt; 上面的UserDAO实现了自定义的IUserDAO接口,并扩展了抽象类: HibernateDaoSupport HibernateSupport实现了HibernateTemplate和SessionFactory实例的关联。 HibernateTemplate对...

    spring笔记

    spring的主要特性。 (1)降低组件之间的耦合度,实现软件各层之间的解耦...(5)容器提供的众多辅作类,使用这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate. (6)对主流的应用框架提供了集成支持。

    一个很好的通用泛型dao(含源码)

    用spring提供的HibernateTemplate注入到GenericHibernateDao中,这样在各个实现类就可以直接调用HibernateTemplate来实现额外的查询操作了。 如果在实现类中不想调用某个方法(例如:update()),就可以覆盖它,方法...

    Spring2.5和Hibernate3集成--学习spring aop ioc

    * 继承HibernateDaoSupport类,使用this.HibernateTemplate这个类持久化数据 * HibernateTemplate是对session的轻量级的封装 * 默认事务回滚异常是RuntiimeException(包括所有继承RuntimeException的子类).普通...

    Spring入门

    5、 Spring提供的众多辅助类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate 6、 Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts2等,更便于应用的开发。

    Spring.3.x企业应用开发实战(完整版).part2

    12.2.2 使用HibernateTemplate 12.2.3 处理LOB类型数据 12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务处理 12.2.8 延迟加载的问题 12.3 在Spring中使用myBatis ...

    Spring3.x企业应用开发实战(完整版) part1

    12.2.2 使用HibernateTemplate 12.2.3 处理LOB类型数据 12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务处理 12.2.8 延迟加载的问题 12.3 在Spring中使用myBatis ...

    ssh(struts2.3.8+spring3.2+heibernate4.1+annotation零配置

    实现了简单用户权限登录,项目中含有mysql数据库 加入了基本的拦截器,错误类处理等 加入了BaseDao,Spring3对Hibernate4已经没有了HibernateDaoSupport和HibernateTemplate的支持,使用了原生态的API

    Spring中文帮助文档

    11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource...

    Spring API

    11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource...

    Spring 2.0 开发参考手册

    18.3. 使用Spring提供的辅助类实现EJB组件 19. JMS 19.1. 简介 19.2. 使用Spring JMS 19.2.1. JmsTemplate 19.2.2. 连接工厂 19.2.3. (消息)目的地管理 19.2.4. 消息侦听容器 19.2.5. 事务管理 19.3. 发送...

Global site tag (gtag.js) - Google Analytics