- /**
- * 向数据库添加一条对应于一个业务对象实例的记录
- *
- * @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) :设置分页的大小