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


    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 {

  • 相关阅读:
    MongoDB学习笔记~大叔分享批量添加—批量更新—批量删除
    Eclipse常用快捷键
    UDP 通信
    HDU 3571 N-dimensional Sphere(高斯消元 数论题)
    【机器学习】SVM核函数
    获取CentOS软件源中的updates包
    13年7月13日CF练习 Codeforces Round #147 (Div. 2)
    VMware vSphere 服务器虚拟化之二十八 桌面虚拟化之安装View传输服务器
    .net下灰度模式图像在创建Graphics时出现:无法从带有索引像素格式的图像创建graphics对象 问题的解决方案。
    庖丁图解八皇后问题
  • 原文地址:https://www.cnblogs.com/sailormoon/p/2826949.html
Copyright © 2020-2023  润新知