/**
* 向数据库添加一条对应于一个业务对象实例的记录
*
* @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
+ " 的查询失败");
}
}