解释 HibernateTemplate

org.springframework.orm.hibernate.HibernateTemplate 类简化 Hibernate 数据访问代码,同时将 checked 的 HibernateExceptions 转换为 unchecked 的DataAccessExceptions 异常,使用theorg.springframework.dao 的异常层次。

使用与JdbcTemplate 相同的 使用相同的 SQLExceptionTranslator 机制。

这个类的核心方法为execute(),支持 Hibernate SQL 语句,实现了 HibernateCallback 接口。

这个类也提供了 Hibernate 的Session 处理机制,专业不需要实现 HibernateCallback 方法来声明恢复/关闭 Hibernate 会话,或者会话生命周期中处理异常。

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

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

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

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

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

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

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

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

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

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

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

Object execute(HibernateCallback action)

List execute(HibernateCallback action)

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

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