博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于HibernateTempleate模版-很多代码可以直接使用,是开发人员不可多得选择
阅读量:5088 次
发布时间:2019-06-13

本文共 16984 字,大约阅读时间需要 56 分钟。

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 {

转载于:https://www.cnblogs.com/sailormoon/archive/2012/12/20/2826949.html

你可能感兴趣的文章
Mongo自动备份
查看>>
cer证书签名验证
查看>>
synchronized
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
Python-Web框架的本质
查看>>
QML学习笔记之一
查看>>
App右上角数字
查看>>
从.NET中委托写法的演变谈开去(上):委托与匿名方法
查看>>
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
IOS-图片操作集合
查看>>