您的位置:首页 > 编程语言

关于HibernateTempleate模版-很多代码可以直接使用,是开发人员不可多得选择

2012-12-20 19:43 441 查看
,

1, 实体类查询

public List<T> findAll(Class<T> entityClass) {

return super.getHibernateTemplate().loadAll(entityClass);

}

2, 保存指定实体类

public Serializable save(T entity) {

return super.getHibernateTemplate().save(entity);

}

3, 查找指定PK的一个实体类对象

public T findEnityById(Class<T> entityClass, PK id) {

return (T) super.getHibernateTemplate().get(entityClass, id);

}

4,更新一个实体 需要更新的实体,须包含主键值

public void update(T t) {

super.getHibernateTemplate().update(t);

}

5,查询所有数据的分页集 实体类型信息 开始下标每页记录数

public List<T> findAllByPage(Class<T> entityClass, int start, int limit) {

String hql = "from " + entityClass.getName() + " model";

return this.findAllByHQLPage(hql, null, start, limit);

}

6,含条件的修改数据 ,通常附加一些更新的条件更新的HQL语句参数,可有项目或多项目,代替Hql中的"?"号

public void update(final String hql, final Object[] params) {

// 使用回调接口完成操作

super.getHibernateTemplate().executeWithNativeSession(

new HibernateCallback() {

public Object doInHibernate(Session session) throws HibernateException, SQLException {

Query query = session.createQuery(hql);

System.out.println(hql);

for (int i = 0; i < params.length; i++) {

query.setParameter(i, params[i]);

}

query.executeUpdate();

return null;

}

});

}

7, /**

* 更新某个实体的-单个属性值

* @param entityClass 需要更新的实体对象类型,

* @param pkName 更新对象的主键名称,主键属性

* @param pkValue 待更新对象的主键值,指定属性的值,表示某行数据被修改

* @param propName 待更新的属性名称,要修改的属性

* @param propValue 待更新的属性值,修改的属性值

public void update(Class<T> entityClass,String pkName,Object
pkValue,String propName,Object propValue){

this.update(entityClass, pkName, pkValue, new String[]{propName}, new Object[]{propValue});

}

8, 删除实体id 实体类型信息

public void deleteById(Class<T> entityClass, PK id) {

super.getHibernateTemplate().delete(this.findEnityById(entityClass, id));

}

9, 查找指定PK的一个实体类对象entityClass 实体Class实体PK实体对象

public T findEnityById(Class<T> entityClass, PK id) {

return (T) super.getHibernateTemplate().get(entityClass, id);

}

10,升序 查询所有实体集合entityClass 实体类型信息 查询到的实体对象集合

public List<T> findAllAsc(Class<T> entityClass,String orderProperty) {

return this.findAll_order(entityClass, orderProperty, "asc");

}

11,分页

/**

* 查询所有数据的分页集

* @param entityClass 实体类型信息

* @param start 开始下标

* @param limit 每页记录数

*/

public List<T> findAllByPage(Class<T> entityClass, int start, int limit) {

String hql = "from " + entityClass.getName() + " model";

return this.findAllByHQLPage(hql, null, start, limit);

}

/**

* 查询所有数据的分页集,并按用户定义方式排序

* @param entityClass 实体类型信息

* @param start 开始下标

* @param limit 每页记录数

*/

public List<T> findAllByPage_order(Class<T> entityClass,String orderDesc, int start, int limit) {

String hql = "from " + entityClass.getName() + " model order by "+orderDesc;

return this.findAllByHQLPage(hql, null, start, limit);

}

/**

* 分页查找指定属性的实体集合

*

* @param entityClass

* 实体

* @param propertyName

* 属性名

* @param value

* 条件

* @return 实体集合

*/

public List<T> findAllByPropertyPage(Class<T> entityClass, String propertyName,

Object propertyValue,int start,int limit) {

String queryString = "from " + entityClass.getName()

+ " as model where model." + propertyName + "= ? ";

return this.findAllByHQLPage(queryString, new Object[]{propertyValue}, start, limit);

}

/**

* 分页查找指定属性的实体集合,并按用户定义方式排序

*

* @param entityClass

* 实体

* @param propertyName

* 属性名

* @param value

* 条件

* @return 实体集合

*/

public List<T> findAllByPropertyPage_order(Class<T> entityClass, String propertyName,

Object propertyValue,String orderDesc,int start,int limit) {

String queryString = "from " + entityClass.getName()

+ " as model where model." + propertyName + "=? order by "+orderDesc;

return this.findAllByHQLPage(queryString, new Object[]{propertyValue}, start, limit);

}

/**

* 查找指定属性集集(逻辑与)的实体集合

*

* @param entityClass

* 实体

* @param propertyNames

* 属性名数组

* @param propertyValues

* 属性值数组

* @return 实体集合

*/

public List<T> findAllByPropertiesPage(Class<T> entityClass, String[] propertyNames,

Object[] propertyValues,int start,int limit) {

if (!(propertyNames!=null&&propertyValues!=null&&propertyValues.length==propertyNames.length)) {

throw new RuntimeException("请提供正确的参数值!propertyNames与propertyValues必须一一对应!");

}

String queryString = "from " + entityClass.getName()

+ " as model where " ;

for (int i = 0; i < propertyValues.length; i++) {

queryString += " model."+propertyNames[i]+" = ? ";

if(i != propertyValues.length-1){

queryString += " and ";

}

}

return this.findAllByHQLPage(queryString,propertyValues,start,limit);

}

/**

* 查找指定属性集集(逻辑与)的实体集合,并按用户定义的方式排序

*

* @param entityClass

* 实体

* @param propertyNames

* 属性名数组

* @param propertyValues

* 属性值数组

* @return 实体集合

*/

public List<T> findAllByPropertiesPage_order(Class<T> entityClass, String[] propertyNames,

Object[] propertyValues,String orderDesc,int start,int limit) {

if (!(propertyNames!=null&&propertyValues!=null&&propertyValues.length==propertyNames.length)) {

throw new RuntimeException("请提供正确的参数值!propertyNames与propertyValues必须一一对应!");

}

String queryString = "from " + entityClass.getName()

+ " as model where " ;

for (int i = 0; i < propertyValues.length; i++) {

queryString += " model."+propertyNames[i]+" = ? ";

if(i != propertyValues.length-1){

queryString += " and ";

}

}

queryString += " order by "+orderDesc;

return this.findAllByHQLPage(queryString,propertyValues,start,limit);

}

/**

* 分页方式模糊查找指定属性的实体集合

*

* @param entityClass

* 实体

* @param propertyName

* 属性名

* @param value

* 条件

* @return 实体集合

*/

public List<T> findAllByLikePropertyPage(Class<T> entityClass, String propertyName,

String propertyValue,int start,int limit) {

String queryString = "from " + entityClass.getName()

+ " as model where model." + propertyName + " like '%"+propertyValue+"%'";

return this.findAllByHQLPage(queryString, null, start, limit);

}

/**

* 分页方式模糊查找指定属性的实体集合,并按用户指定方式排序

*

* @param entityClass

* 实体

* @param propertyName

* 属性名

* @param value

* 条件

* @return 实体集合

*/

public List<T> findAllByLikePropertyPage_order(Class<T> entityClass, String propertyName,

String propertyValue,String orderDesc,int start,int limit) {

String queryString = "from " + entityClass.getName()

+ " as model where model." + propertyName + " like '%"+propertyValue+"%'";

queryString += " order by "+orderDesc;

return this.findAllByHQLPage(queryString, null, start, limit);

}

/**

* 有分页支持的HQL查询

* @param hql 查询用hql语句

* @param params参数列表

* @param start 开始下标

* @param limit 每页记录数

*/

public List<T> findAllByHQLPage(final String hql, final Object[] params,

final int start, final int limit) {

return (List<T>) super.getHibernateTemplate().executeWithNativeSession(

new HibernateCallback() {

public Object doInHibernate(Session session)

throws HibernateException, SQLException {

Query query = session.createQuery(hql);

if (params != null && params.length > 0) {

for (int i = 0; i < params.length; i++) {

query.setParameter(i, params[i]);

}

}

// 表示是分页查询

if (start != -1 && limit != -1) {

query.setFirstResult(start);

query.setMaxResults(limit);

}

return query.list();

}

});

}

/**

* 获得总的记录数

* @param entityClass 实体类的类信信息

* @return 该实体所对应的表中的记录总数

*/

public Long getTotalCount(final Class<T> entityClass) {

return (Long) super.getHibernateTemplate().executeWithNativeSession(

new HibernateCallback() {

public Object doInHibernate(Session session)

throws HibernateException, SQLException {

String hql = "select count(o) from "

+ entityClass.getName() + " o";

Query query = session.createQuery(hql);

Object obj = query.uniqueResult();

return obj;

}

});

}

/**

* 带条件的分页记录总数查询

*

* @param hql 查询hql语句

* @param params 参数列表

* @return 满足该条件的记录总数

*/

public Long getTotalCountByHQL(final String hql, final Object[] params) {

return (Long) super.getHibernateTemplate().executeWithNativeSession(

new HibernateCallback() {

public Object doInHibernate(Session session)

throws HibernateException, SQLException {

Query query = session.createQuery(hql);

if (params != null && params.length > 0) {

for (int i = 0; i < params.length; i++) {

query.setParameter(i, params[i]);

}

}

return query.uniqueResult();

}

});

}

/**

* 带条件的分页记录总数查询

*

* @param hql 查询hql语句

* @return 满足该条件的记录总数

*/

public Long getTotalCountByHQL(final String hql) {

return this.getTotalCountByHQL(hql, null);

}

/***************************************************************************

* 以下部分是QBE查询

**************************************************************************/

/**

* 根据模板对象查找对应的所有记录(不分页)

*

* @param entityClass

* 实体类型信息

* @param example

* 查询模板对象

* @return 查询到的记录集

*/

public List<T> findAllByQBE(final Class<T> entityClass, final T example) {

return this.findAllByQBEPage(entityClass, example, -1, -1);

}

/**

* 根据模板对象查找对应的分页记录

*

* @param entityClass

* 实体类型信息

* @param example

* 查询模板对象

* @param start

* 开始记录下标

* @param limit

* 每页记录数

* @return 查询到的分页记录集

*/

public List<T> findAllByQBEPage(final Class<T> entityClass,

final T example, final int start, final int limit) {

return this.findAllByQBEPage(entityClass, example, start, limit, null);

}

/**

* 根据模板对象查找对应的记录(含分页和排序)

*

* @param entityClass

* 实体类型信息

* @param example

* 查询模板对象

* @param start

* 开始记录下标

* @param limit

* 每页记录数

* @param orders

* 自定义排序对象数组

* @return 查询到的分页记录集

*/

public List<T> findAllByQBEPage(final Class<T> entityClass,

final T example, final int start, final int limit,

final Order[] orders) {

return (List<T>) super.getHibernateTemplate().executeWithNativeSession(

new HibernateCallback() {

public Object doInHibernate(Session session)

throws HibernateException, SQLException {

Criteria criteria = session.createCriteria(entityClass);

criteria.add(Example.create(example));

// 设置排序

if (orders != null && orders.length > 0) {

for (int i = 0; i < orders.length; i++) {

criteria.addOrder(orders[i]);

}

}

if (start != -1 && limit != -1) {

criteria.setFirstResult(start);

criteria.setMaxResults(limit);

}

return criteria.list();

}

});

}

/**

* 查询一个统计函数的结果

*

* @param entityClass

* 实体的类型信息

* @param example

* 模板对象

* @param projection

* 聚合函数对象

* @return

*/

public Object getStatisticalValueByQBE(final Class<T> entityClass,

final T example, final Projection projection) {

return super.getHibernateTemplate().executeWithNativeSession(

new HibernateCallback() {

public Object doInHibernate(Session session)

throws HibernateException, SQLException {

Criteria criteria = session.createCriteria(entityClass);

criteria.add(Example.create(example));

criteria.setProjection(projection);

return criteria.uniqueResult();

}

});

}

/**

* 根据模板对象查找对应的记录的总数

*

* @param entityClass

* 实体类型信息

* @param example

* 模板对象

* @return

*/

public Integer getTotalCountByExample(final Class<T> entityClass, final T example) {

return (Integer) super.getHibernateTemplate().executeWithNativeSession(

new HibernateCallback() {

public Object doInHibernate(Session session)

throws HibernateException, SQLException {

Criteria criteria = session.createCriteria(entityClass);

criteria.add(Example.create(example));

criteria.setProjection(Projections.rowCount());// 总行数

return criteria.uniqueResult();

}

});

}

/***************************************************************************

* 以下是QBC查询

**************************************************************************/

/**

* 最全的QBC查询基础方法

* @param entityClass 实体类型信息

* @param start 开始下标

* @param limit 每页记录数

* @param criterions 查询条件数组,由Restrictions对象生成,如Restrictions.like("name","%x%")等;

* @param orders 查询后记录的排序条件,由Order对象生成

* @param projs 分组和聚合查询条件

* @param isUniqueResult 是否返回唯一值

* @return

*/

public Object findAllByQBCPage(final Class<T> entityClass, final int start,

final int limit,final Criterion[] criterions,final Order[] orders,

final Projection[] projs, final boolean isUniqueResult) {

return super.getHibernateTemplate().executeWithNativeSession(

new HibernateCallback() {

public Object doInHibernate(Session session)

throws HibernateException, SQLException {

Criteria criteria = session.createCriteria(entityClass);

//添加条件

if(criterions!=null&&criterions.length>0){

for (int i = 0; i < criterions.length; i++) {

criteria.add(criterions[i]);

}

}

//添加排序

if(orders!=null&&orders.length>0){

for (int i = 0; i < orders.length; i++) {

criteria.addOrder(orders[i]);

}

}

//添加分组统计

if(projs!=null&&projs.length>0){

for (int i = 0; i < projs.length; i++) {

criteria.setProjection(projs[i]);

}

}

//查看是否要分页

if(start!=-1&&limit!=-1){

criteria.setFirstResult(start);

criteria.setMaxResults(limit);

}

if(isUniqueResult){

return criteria.uniqueResult();

}else{

return criteria.list();

}

}

});

}

/**

* 用QBC查询满足条件的分页记录(分页、排序)

* @param entityClass 实体类型信息

* @param start 开始下标

* @param limit 每页记录数

* @param criterions 查询条件数组,由Restrictions对象生成,如Restrictions.like("name","%x%")等;

* @param orders 查询后记录的排序条件,由Order对象生成

* @return

*/

public List<T> findAllByQBCPage(final Class<T> entityClass, final int start,

final int limit,final Criterion[] criterions,final Order[] orders) {

return (List<T>) this.findAllByQBCPage(entityClass, start, limit, criterions, orders, null, false);

}

/**

* 用QBC查询满足条件的分页记录(分页)

* @param entityClass 实体类型信息

* @param start 开始下标

* @param limit 每页记录数

* @param criterions 查询条件数组,由Restrictions对象生成,如Restrictions.like("name","%x%")等;

* @return

*/

public List<T> findAllByQBCPage(final Class<T> entityClass, final int start,

final int limit,final Criterion[] criterions) {

return (List<T>) this.findAllByQBCPage(entityClass, start, limit, criterions, null, null, false);

}

/**

* 用QBC查询满足条件的所有记录(不分页)

* @param entityClass 实体类型信息

* @param criterions 查询条件数组,由Restrictions对象生成,如Restrictions.like("name","%x%")等;

* @param orders 查询后记录的排序条件,由Order对象生成

* @return

*/

public List<T> findAllByQBCPage(final Class<T> entityClass,final Criterion[] criterions) {

return (List<T>) this.findAllByQBCPage(entityClass, -1, -1, criterions, null, null, false);

}

/**

* 查询滞QBC条件的记录总数

* @param entityClass 实体类型信息

* @param criterions 查询条件数组,由Restrictions对象生成,如Restrictions.like("name","%x%")等;

* @return

*/

public Integer getTotalCountByQBC(final Class<T> entityClass,final Criterion[] criterions){

return (Integer)this.findAllByQBCPage(entityClass, -1, -1, criterions, null,new Projection[]{Projections.rowCount()}, true);

}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

public Entity create(Entity entity) throws DaoException {

try
{

getHibernateTemplate().save(entity);

return
entity;

} catch
(DataAccessException e) {

throw new
DaoException("保存
" + entity.getClass().getName()

+ " 实例到数据库失败", e);

}

}

public
void

update(Entity
entity)throws DaoException {

try
{

getHibernateTemplate().update(entity);

} catch
(DataAccessException e) {

throw new
DaoException("更新
" + entity.getClass().getName()

+ " 实例到数据库失败", e);

}

}

public
void

delete(Entity
entity)throws DaoException {

try
{

getHibernateTemplate().delete(entity);

} catch
(DataAccessException e) {

throw new
DaoException("从数据库删除
" + entity.getClass().getName()

+ " 实例失败", e);

}

}

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);

}

}

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);

}

}

public
List
loadAll(Class
clazz)throws DaoException {

try
{

return
getHibernateTemplate().loadAll(clazz);

} catch
(DataAccessException e) {

throw new
DaoException("加载所有
" + clazz.getName() +
"实例时失败", e);

}

}

public
List find(String queryString)
throws
DaoException {

try
{

return
getHibernateTemplate().find(queryString);

} catch
(DataAccessException e) {

throw new
DaoException("执行查询
" + queryString + "失败", e);

}

}

public
List find(String queryString, Object param) throws DaoException {

try
{

return
getHibernateTemplate().find(queryString, param);

} catch
(DataAccessException e) {

throw new
DaoException("执行参数为
" + param + "的查询 " +
queryString

+ " 失败", e);

}

}

public
List find(String queryString, Object[] params)
throws
DaoException {

try
{

return
getHibernateTemplate().find(queryString, params);

} catch
(DataAccessException e) {

StringBuffer
paramString = newStringBuffer("");

for
(int i
= 0; i < params.length; i++) {

paramString.append(params[i]);

paramString.append(" ");

}

throw new
DaoException("执行参数为
" + paramString + "的查询"

+ queryString + " 失败", e);

}

}

public
List
findByNamedQuery(String
queryName)throws DaoException {

try
{

return
getHibernateTemplate().findByNamedQuery(queryName);

} catch
(DataAccessException e) {

throw new
DaoException("执行命名为
" + queryName + "的查询失败");

}

}

public
List
findByNamedQuery(String queryName,Object param)

throws
DaoException {

try
{
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐