HibernateTamplate封装类

 

package com.accp.bm.dao;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.Projections;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

@SuppressWarnings("unchecked")
/**
 * T extends Serializable T其实就是一个占位符, 你也可以换成其它字母,但作为惯例 当我们需要一种类型时,我们都T来

占位,表示Type ,
 * 后面的extends Serializable 表示在实际应用过程中,替换T的类型必须实现Serializable接口. PK => Primary
 * Key
 */
public interface BaseDao<T extends Serializable, PK extends Serializable> {

 /***************************************************************************
  * 新增
  **************************************************************************/

 /**
  * 保存指定实体类
  *
  * @param entityobj
  *            实体类
  */
 public Serializable save(T entity);

 /***************************************************************************
  * 更新
  **************************************************************************/
 /**
  * 更新一个实体
  *
  * @param t
  *            需要更新的实体,须包含主键值
  */
 public void update(T t);

 /***************************************************************************
  * 更新实体 ,通常附加一些更新的条件
  *
  * @param hql
  *            更新的HQL语句
  * @param params
  *            参数,可有项目或多项目,代替Hql中的"?"号
  */
 public void update(final String hql, final Object[] params);

 /**
  * 更新某个实体的单个属性值
  *
  * @param entityClass
  *            需要更新的实体对象类型
  * @param pkName
  *            更新对象的主键名称
  * @param pkValue
  *            待更新对象的主键值
  * @param propName
  *            待更新的属性名称
  * @param propValue
  *            待更新的属性值
  */
 public void update(Class<T> entityClass, String pkName, Object pkValue,
   String propName, Object propValue);

 /**
  * 更新某个实体的多个属性值
  *
  * @param entityClass
  *            需要更新的实体对象类型
  * @param pkName
  *            更新对象的主键名称
  * @param pkValue
  *            待更新对象的主键值
  * @param propNames
  *            待更新的属性名称数组
  * @param propValues
  *            待更新的属性值数组
  */
 public void update(Class<T> entityClass, String pkName, Object pkValue,
   String[] propNames, Object[] propValues);

 /**
  * 更新或保存指定实体
  *
  * @param entity
  *            实体类
  */
 public void saveorupdate(T entity);

 /***************************************************************************
  * 删除
  **************************************************************************/

 /**
  * 删除指定实体
  *
  * @param entityobj
  *            实体类
  */
 public void delete(T entity);

 /***************************************************************************
  * 删除实体
  *
  * @param entityClass
  *            实体类型信息
  * @param id
  *            实体的ID
  */
 public void deleteById(Class<T> entityClass, PK id);

 /**
  * 根据多个属性的组合值删除一批对象
  *
  * @param entityClass
  *            对象类型信息
  * @param propName
  *            参数名称
  * @param propValue
  *            参数值
  */
 public void deleteByProperty(final Class<T> entityClass,
   final String propName, final Object propValue);

 /**
  * 根据多个属性的组合值删除一批对象
  *
  * @param entityClass
  *            对象类型信息
  * @param propNames
  *            参数名称数组
  * @param propValues
  *            参数值数组
  */
 public void deleteByProperty(final Class<T> entityClass,
   final String[] propNames, final Object[] propValues);

 /***************************************************************************
  * 查询
  **************************************************************************/

 /**
  * 查找指定PK的一个实体类对象
  *
  * @param entityClass
  *            实体Class
  * @param id
  *            实体PK
  * @return 实体对象
  */
 public T findEnityById(Class<T> entityClass, PK id);

 /**
  * 获取所有实体集合
  *
  * @param entityClass
  *            实体类型信息
  * @return 查询到的实体对象集合
  */
 public List<T> findAll(Class<T> entityClass);

 /**
  * 升序 查询所有实体集合
  *
  * @param entityClass
  *            实体类型信息
  * @return 查询到的实体对象集合
  */
 public List<T> findAllAsc(Class<T> entityClass, String orderProperty);

 /**
  * 降序 查询所有实体集合
  *
  * @param entityClass
  *            实体类型信息
  * @return 查询到的实体对象集合
  */
 public List<T> findAllDesc(Class<T> entityClass, String orderProperty);;

 /**
  * 升序/倒序 查询所有实体集合
  *
  * @param entityClass
  *            实体类型信息
  * @return 查询到的实体对象集合
  */
 public List<T> findAll_order(Class<T> entityClass, String orderProperty,
   String orderType);

 /*
  * 自定义排序 查询所有实体集合
  *
  * @param entityClass 实体类型信息
  *
  * @return 查询到的实体对象集合
  */
 public List<T> findAll_order(Class<T> entityClass, String orderDesc);

 /**
  * 查找指定属性的实体集合
  *
  * @param entityClass
  *            实体
  * @param propertyName
  *            属性名
  * @param value
  *            条件
  * @return 实体集合
  */
 public List<T> findAllByProperty(Class<T> entityClass, String propertyName,
   Object propertyValue);

 /**
  * 自定义排序查找指定属性的实体集合
  *
  * @param entityClass
  *            实体
  * @param propertyName
  *            属性名
  * @param value
  *            条件
  * @return 实体集合
  */
 public List<T> findAllByProperty_order(Class<T> entityClass,
   String propertyName, Object propertyValue, String orderDesc);

 /**
  * 查找指定属性集集(逻辑与)的实体集合
  *
  * @param entityClass
  *            实体
  * @param propertyNames
  *            属性名数组
  * @param propertyValues
  *            属性值数组
  * @return 实体集合
  */
 public List<T> findAllByProperties(Class<T> entityClass,
   String[] propertyNames, Object[] propertyValues);

 /**
  * 查找指定属性集集(逻辑与)的实体集合,并按用户定义的方式排序
  *
  * @param entityClass
  *            实体
  * @param propertyNames
  *            属性名数组
  * @param propertyValues
  *            属性值数组
  * @return 实体集合
  */
 public List<T> findAllByProperties_order(Class<T> entityClass,
   String[] propertyNames, Object[] propertyValues, String orderDesc);

 /**
  * 模糊查找指定属性的实体集合
  *
  * @param entityClass
  *            实体
  * @param propertyName
  *            属性名
  * @param value
  *            条件
  * @return 实体集合
  */
 public List<T> findAllByLikeProperty(Class<T> entityClass,
   String propertyName, String propertyValue);

 /**
  * 模糊查找指定属性的实体集合,并按用户定义方式排序
  *
  * @param entityClass
  *            实体
  * @param propertyName
  *            属性名
  * @param value
  *            条件
  * @return 实体集合
  */
 public List<T> findAllByLikeProperty_order(Class<T> entityClass,
   String propertyName, String propertyValue, String orderDesc);

 /**
  * 根据HQL语句查询满足要求的所有记录
  *
  * @param hql
  *            hql语句
  * @param params
  *            参数列表
  * @return
  */
 public List<T> findAllByHQL(final String hql);

 /**
  * 根据HQL语句查询满足要求的所有记录
  *
  * @param hql
  *            hql语句
  * @param params
  *            参数列表
  * @return
  */
 public List<T> findAllByHQL(final String hql, final Object[] params);

 /**
  * 查询所有数据的分页集
  *
  * @param entityClass
  *            实体类型信息
  * @param start
  *            开始下标
  * @param limit
  *            每页记录数
  */
 public List<T> findAllByPage(Class<T> entityClass, int start, int limit);

 /**
  * 查询所有数据的分页集,并按用户定义方式排序
  *
  * @param entityClass
  *            实体类型信息
  * @param start
  *            开始下标
  * @param limit
  *            每页记录数
  */
 public List<T> findAllByPage_order(Class<T> entityClass, String orderDesc,
   int start, int limit);

 /**
  * 分页查找指定属性的实体集合
  *
  * @param entityClass
  *            实体
  * @param propertyName
  *            属性名
  * @param value
  *            条件
  * @return 实体集合
  */
 public List<T> findAllByPropertyPage(Class<T> entityClass,
   String propertyName, Object propertyValue, int start, int 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);

 /**
  * 查找指定属性集集(逻辑与)的实体集合
  *
  * @param entityClass
  *            实体
  * @param propertyNames
  *            属性名数组
  * @param propertyValues
  *            属性值数组
  * @return 实体集合
  */
 public List<T> findAllByPropertiesPage(Class<T> entityClass,
   String[] propertyNames, Object[] propertyValues, int start,
   int 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);

 /**
  * 分页方式模糊查找指定属性的实体集合
  *
  * @param entityClass
  *            实体
  * @param propertyName
  *            属性名
  * @param value
  *            条件
  * @return 实体集合
  */
 public List<T> findAllByLikePropertyPage(Class<T> entityClass,
   String propertyName, String propertyValue, int start, int 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);

 /**
  * 有分页支持的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);

 /**
  * 获得总的记录数
  *
  * @param entityClass
  *            实体类的类信信息
  * @return 该实体所对应的表中的记录总数
  */
 public Long getTotalCount(final Class<T> entityClass);

 /**
  * 带条件的分页记录总数查询
  *
  * @param hql
  *            查询hql语句
  * @param params
  *            参数列表
  * @return 满足该条件的记录总数
  */
 public Long getTotalCountByHQL(final String hql, final Object[] params);

 /**
  * 带条件的分页记录总数查询
  *
  * @param hql
  *            查询hql语句
  * @return 满足该条件的记录总数
  */
 public Long getTotalCountByHQL(final String hql);

 /***************************************************************************
  * 以下部分是QBE查询
  **************************************************************************/

 /**
  * 根据模板对象查找对应的所有记录(不分页)
  *
  * @param entityClass
  *            实体类型信息
  * @param example
  *            查询模板对象
  * @return 查询到的记录集
  */
 public List<T> findAllByQBE(final Class<T> entityClass, final T example);

 /**
  * 根据模板对象查找对应的分页记录
  *
  * @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);

 /**
  * 根据模板对象查找对应的记录(含分页和排序)
  *
  * @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);

 /**
  * 查询一个统计函数的结果
  *
  * @param entityClass
  *            实体的类型信息
  * @param example
  *            模板对象
  * @param projection
  *            聚合函数对象
  * @return
  */
 public Object getStatisticalValueByQBE(final Class<T> entityClass,
   final T example, final Projection projection);

 /**
  * 根据模板对象查找对应的记录的总数
  *
  * @param entityClass
  *            实体类型信息
  * @param example
  *            模板对象
  * @return
  */
 public Integer getTotalCountByExample(final Class<T> entityClass,
   final T example);

 /***************************************************************************
  * 以下是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);

 /**
  * 用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);

 /**
  * 用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);

 /**
  * 用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);

 /**
  * 查询滞QBC条件的记录总数
  *
  * @param entityClass
  *            实体类型信息
  * @param criterions
  *            查询条件数组,由Restrictions对象生成,如Restrictions.like("name","%x%")等;
  * @return
  */
 public Integer getTotalCountByQBC(final Class<T> entityClass,
   final Criterion[] criterions);
}

你可能感兴趣的:(object,String,Integer,delete,Class,interface)