Hibernate 持久层通用实现

xiaoxiao2021-02-28  98

接口:

/** * 抽取持久层通用方法 * @param <T> */ public interface IBaseDao<T> { public void save(T entity); public void delete(T entity); public void update(T entity); public void saveOrUpdate(T entity); public T findById(Serializable id); public List<T> findAll(); //提供通用修改方法 public void executeUpdate(String queryName,Object ...objects); //PageBean封装通用分页组件 public void pageQuery(PageBean pageBean); //DetachedCriteria 离线查询方法 public List<T> findByCriteria(DetachedCriteria detachedCriteria); } 接口实现

/** * 持久层通用实现 */ public class BaseDaoImpl<T> extends HibernateDaoSupport implements IBaseDao<T> { // 实体类型 private Class<T> entityClass; // 使用注解方式进行依赖注入 @Resource public void setMySessionFactory(SessionFactory sessionFactory) { super.setSessionFactory(sessionFactory); } /** * 在构造方法中动态获得操作的实体类型 */ public BaseDaoImpl() { // 获得父类(BaseDaoImpl<T>)类型 ParameterizedType genericSuperclass = (ParameterizedType) this .getClass().getGenericSuperclass(); // 获得父类上的泛型数组 Type[] actualTypeArguments = genericSuperclass.getActualTypeArguments(); entityClass = (Class<T>) actualTypeArguments[0]; } public void save(T entity) { this.getHibernateTemplate().save(entity); } public void delete(T entity) { this.getHibernateTemplate().delete(entity); } public void update(T entity) { this.getHibernateTemplate().update(entity); } public void saveOrUpdate(T entity) { this.getHibernateTemplate().saveOrUpdate(entity); } public T findById(Serializable id) { return this.getHibernateTemplate().get(entityClass, id); } @SuppressWarnings("unchecked") public List<T> findAll() {// FROM User String hql = "FROM " + entityClass.getSimpleName(); return (List<T>) this.getHibernateTemplate().find(hql); } /** * 通用更新方法 */ public void executeUpdate(String queryName, Object... objects) { Session session = this.getSession();// 从本地线程中获得session对象 // 使用命名查询语句获得一个查询对象 Query query = session.getNamedQuery(queryName); // 为HQL语句中的?赋值 int i = 0; for (Object arg : objects) { query.setParameter(i++, arg); } query.executeUpdate();// 执行更新 } /** * 通用分页查询方法 */ public void pageQuery(PageBean pageBean) { int currentPage = pageBean.getCurrentPage(); int pageSize = pageBean.getPageSize(); DetachedCriteria detachedCriteria = pageBean.getDetachedCriteria(); //总数据量----select count(*) from t_staff //改变Hibernate框架发出的sql形式 //select count(*) from t_staff detachedCriteria.setProjection(Projections.rowCount()); List<Long> list = (List<Long>) this.getHibernateTemplate(). findByCriteria(detachedCriteria); Long total = list.get(0); pageBean.setTotal(total.intValue());//设置总数据量 detachedCriteria.setProjection(null);//修改sql的形式为select * from .... //重置表和类的映射关系 detachedCriteria.setResultTransformer(DetachedCriteria.ROOT_ENTITY); //当前页展示的数据集合 int firstResult = (currentPage - 1) * pageSize; int maxResults = pageSize; List rows = this.getHibernateTemplate(). findByCriteria(detachedCriteria, firstResult, maxResults); pageBean.setRows(rows); } public List<T> findByCriteria(DetachedCriteria detachedCriteria) { return (List<T>) this.getHibernateTemplate(). findByCriteria(detachedCriteria); } } 通用分页组

/** * 封装分页信息 */ public class PageBean { private int currentPage;//当前页码 private int pageSize;//每页显示记录数 private DetachedCriteria detachedCriteria;//离线条件查询对象,包装查询条件 private int total;//总记录数 private List rows;//当前页需要展示的数据集合 public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } public DetachedCriteria getDetachedCriteria() { return detachedCriteria; } public void setDetachedCriteria(DetachedCriteria detachedCriteria) { this.detachedCriteria = detachedCriteria; } public List getRows() { return rows; } public void setRows(List rows) { this.rows = rows; } }

转载请注明原文地址: https://www.6miu.com/read-53829.html

最新回复(0)