/**
* 向数据库添加一条对应于一个业务对象实例的记录
*
* @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类的使用详解 #### 一、引言 在Java开发中,持久层框架Hibernate因其优秀的ORM(Object-Relational Mapping)特性被广泛应用。为了更便捷地使用Hibernate,Spring框架提供了一系列工具类来简化...
### HibernateTemplate 的详细介绍与使用范围 #### 一、概述 在Spring框架中,`HibernateTemplate`作为ORM(Object Relational Mapping)技术中的一个重要组件,它提供了简化Hibernate操作的方法集,使得开发人员...
`HibernateTemplate`类本身并没有直接继承自任何特定类,但它是Spring框架中众多DAO支持类之一。这些类通常用于处理数据访问异常以及资源管理等任务。`HibernateTemplate`主要依赖于`SessionFactory`来创建和管理...
**HibernateTemplate** 是 Spring 框架中用于简化 Hibernate 使用的一个工具类。它通过 AOP(面向切面编程)的思想,封装了大量的 CRUD(创建、读取、更新、删除)操作,使得开发者能够更加专注于业务逻辑的实现,而...
在实际应用中,DAO(Data Access Object)类通常会使用HibernateTemplate。例如,以下是一个简单的`PersonDAOImpl`类的示例: ```java public class PersonDAOImpl implements PersonDAO { private static Log log...
下面是一个使用`HibernateTemplate`的DAO实现类的示例代码,该类实现了`PersonDAO`接口,包含了基本的增删改查操作。 ```java public class PersonDAOHibernate implements PersonDAO { // 使用log4j记录日志 ...
`HibernateTemplate`是Spring框架中用于操作Hibernate的一个便捷工具类,它极大地简化了Hibernate在实际应用中的集成与开发工作。通过`HibernateTemplate`,开发者可以非常方便地进行数据的增删改查等基本操作,而...
HibernateTemplate是Spring框架提供的一种操作Hibernate的方式,它简化了Hibernate的使用过程,使开发者无需关注Session的管理与事务控制,极大地提高了开发效率。本文将对HibernateTemplate的主要用法进行详细介绍...
1. **HibernateTemplate**:是Spring框架提供的用于简化Hibernate使用的模板类。它提供了大量操作数据库的方法,包括查询、更新等,并且内置了事务管理机制。 2. **分组统计**:指通过SQL语句对查询结果按照一个或多...
本文将深入探讨如何利用Hibernate中的`HibernateTemplate`类进行批量数据删除操作,这不仅能够提高数据处理效率,还能优化数据库性能。 ### HibernateTemplate与批量删除 在Hibernate框架中,`HibernateTemplate`...
在这个框架中,HibernateTemplate是Spring提供的一个工具类,它简化了Hibernate的使用,使得开发者可以更方便地进行数据库操作,如增删改查。接下来,我们将深入探讨如何在SSH2中使用HibernateTemplate进行这些基本...
3. **使用HibernateTemplate**:在我们的业务逻辑类中,我们可以通过@Autowired注解或者使用getBean方法从Spring容器中获取HibernateTemplate实例,然后调用它的方法进行数据库操作。例如: ```java @Service ...
HibernateTemplate是 Hibernate框架中的一种模板类,提供了许多实用的方法来操作数据库。下面将对HibernateTemplate中的一些常用方法进行详细介绍: applyNamedParameterToQuery方法 该方法用于将命名参数应用于...
2. DAO接口的实现类,使用`HibernateTemplate`进行实际的数据库操作。 Service层的生成则涉及: 1. Service接口,声明业务逻辑方法,可能包括复杂的业务组合操作。 2. Service接口的实现类,调用DAO层的方法完成...
HibernateTemplate是Spring为简化Hibernate操作而设计的一个类,它包装了Hibernate的Session对象,提供了事务管理、异常转换等功能。使用HibernateTemplate,开发者无需手动管理Session,避免了可能出现的资源泄露...
为了解决这些问题,Spring框架提供了一个称为HibernateTemplate的类,它是对Hibernate API的一个封装,旨在提高开发效率和代码的可维护性。 **一、HibernateTemplate介绍** HibernateTemplate是Spring框架的一个...
为了简化Hibernate与Spring的整合,Spring提供了`HibernateTemplate`类,它是一个封装了Hibernate Session的工具类,使得在处理数据库操作时更加方便。`HibernateTemplate`在事务管理、异常转换等方面提供了很多便利...
`HibernateTemplate`是Spring提供的用于简化Hibernate使用的类。它提供了许多便捷的方法,使得开发者无需关心Hibernate Session的管理,而可以直接进行数据访问操作。以下是几个常见的方法: - **void delete...
为了简化Hibernate与Spring的集成,Spring提供了HibernateTemplate类,它是Spring对Hibernate的一种封装,使得在DAO层操作数据库变得更加简便和安全。 首先,我们来看如何在DAO中使用HibernateTemplate。通常,DAO...
在使用HibernateTemplate的saveOrUpdate方法时,如果遇到类似`\xE7\x84`这样的十六进制字符串,通常这是由于字符编码不匹配导致的汉字乱码问题。这个问题主要涉及到数据库的字符集设置、应用程序的编码配置以及数据...