/**
* 向数据库添加一条对应于一个业务对象实例的记录
*
* @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
+ " 的查询失败");
}
}
分享到:
相关推荐
3. **使用HibernateTemplate**:在我们的业务逻辑类中,我们可以通过@Autowired注解或者使用getBean方法从Spring容器中获取HibernateTemplate实例,然后调用它的方法进行数据库操作。例如: ```java @Service ...
- 创建HibernateTemplate实例:使用SessionFactory创建HibernateTemplate,通常通过`setSessionFactory()`方法注入SessionFactory。 - 编写业务逻辑:调用HibernateTemplate提供的方法,如`save()`, `update()`, `...
在这样的背景下,HibernateTemplate应运而生,它采用模板设计模式,通过提供一系列通用的数据库操作方法,简化了Hibernate的使用方式,使得开发者能够更加专注于业务逻辑的实现。 #### 二、模板设计模式简介 模板...
2. **HibernateTemplate的常用方法**: - `delete(Object entity)`: 删除指定的持久化实体。 - `deleteAll(Collection entities)`: 删除集合中的所有持久化实体。 - `find(String queryString)`: 根据HQL字符串...
Spring提供了声明式事务管理,可以在配置文件中定义事务管理器,并在Service方法上添加@Transactional注解来开启事务。 ```xml ``` ```java @Service @Transactional public class UserService { // ... } ``...
HibernateTemplate的灵活访问方式是通过如下两个方法完成的: Object execute(HibernateCallback action) List execute(HibernateCallback action) 开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来...
在“Spring相关测试4”中,我们将重点探讨Spring框架如何与Hibernate ORM工具进行整合,特别是在使用HibernateTemplate和HibernateDaoSupport这两个关键组件时的不同版本测试。这将帮助我们了解如何在不同版本的...
虽然它不是直接与Hibernate相关,但在处理数据库事务时,也可以与HibernateTemplate一起使用,为非Hibernate操作提供事务支持。 在Spring中,事务的传播特性(Transaction Propagation)决定了在一个事务方法被调用...
总结一下,Spring框架的继承机制和空指针异常主要与类层次结构、依赖注入以及正确配置相关bean有关。在使用`HibernateDaoSupport`或其他类似支持类时,务必确保它们的依赖已经适当地初始化和注入,以避免遇到运行时...
在`MemberDaoImpl`实现类中,我们利用`HibernateTemplate`的`executeFind`方法,通过传入一个实现了`HibernateCallback`接口的匿名内部类来执行HQL查询,并设置分页参数。 2. `getAllRowCount`:此方法用于获取满足...
读取数据通常通过findById或其他查询方法实现,这些方法由DAO实现类中的HibernateTemplate调用。 ```java public User getUserById(Long id) { return userRepository.findById(id); } ``` 3.3 更新(Update) ...
这样,你就可以在DAO类中调用相关方法进行数据库操作了。例如: ```xml <property name="hibernateTemplate" ref="hibernateTemplate"/> ``` 最后,编写具体的DAO实现类,如Entity1DAOImpl,使用...
整合的主要目标是利用Spring的IoC容器管理Hibernate的相关组件,如SessionFactory、Session等,这样可以避免在代码中直接创建和管理这些对象,提高代码的可测试性和可维护性。Spring提供了一种名为HibernateTemplate...
- HibernateTemplate提供了如save(), update(), delete(), get()和load()等方法,以及基于HQL(Hibernate Query Language)的queryForList()等方法。 3. **DAO(数据访问对象)设计**: - Spring鼓励使用DAO接口...
1. **配置Hibernate**:在项目中引入Hibernate 3的库,包括hibernate-core、hibernate-tools等相关依赖。然后在MyEclipse的首选项设置中配置Hibernate,包括指定Hibernate的版本、连接数据库的驱动等。 2. **建立...
4. **配置HibernateTemplate**:创建HibernateTemplate Bean,注入SessionFactory,并设置其他相关属性,如show_sql、format_sql等。 5. **创建DAO层**:在DAO层,继承HibernateDaoSupport或者直接使用...
通过`getHibernateTemplate()`方法,我们可以获取到一个预配置好的HibernateTemplate对象,它会自动处理Session的打开、关闭和事务提交/回滚。 3. HibernateTemplate的使用:HibernateTemplate是Spring提供的一个...
以下将详细阐述相关知识点,包括过滤器的基本概念、配置方法、源码解析及实际应用场景。 ### Hibernate过滤器基本概念 Hibernate过滤器是Hibernate框架提供的一种强大的数据筛选工具,它允许在数据库级别对数据...
- **HibernateTemplate**:提供了丰富的数据访问方法,类似于自定义的CommonDAO。 - **LocalSessionFactoryBean**:负责创建SessionFactory,需要配置Hibernate的相关参数。 - **HibernateDaoSupport**:为业务逻辑...
1. 引入Hibernate和Spring的相关依赖库。 2. 配置Hibernate的SessionFactory,包括数据库连接信息(如JDBC URL、用户名、密码)、Hibernate的配置属性(如dialect、show_sql等)。 3. 创建SessionFactory Bean,例如...