,
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 {