Hibernate 通用操作类 BaseHibernateDao
2015-08-15 06:26
567 查看
在用HIbernate的时候,写DAO每次都要获取session,query,感觉很繁琐,就自己写了一个类,实现了绝大多数功能,代码简化了很多,话不多说,直接上代码:
BaseHibernateDao类
PageBean类
HibernateSessionFactory 类,这个是MyEclise自动生成的,这里一并贴上
好了,这样就不必每次都写一堆繁琐重复的代码了。
BaseHibernateDao类
package cn.util; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.util.List; import java.util.Map; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import cn.util.HibernateSessionFactory;//session工厂类 import cn.util.PageBean;//分页包装类 /** * BaseHibernateDao 定义DAO的通用操作的实现 * * @author hezhao * */ @SuppressWarnings("unchecked") public abstract class BaseHibernateDao<T> { private Class<T> clazz; /** * 反射 通过构造方法指定DAO的具体实现类 */ public BaseHibernateDao() { ParameterizedType type = (ParameterizedType) this.getClass() .getGenericSuperclass(); clazz = (Class<T>) type.getActualTypeArguments()[0]; // System.out.println("DAO的真实实现类是:" + this.clazz.getName()); } /** * 查询返回集合 * * @param hql * @param params * @return List */ public List<T> queryList(String hql, Object... params) { return prepareQuery(hql, params).list(); } /** * 查询返回集合 * * @param hql * @param params * @return List */ public List<T> queryList(String hql, Map<Object, Object> params) { return prepareQuery(hql, params).list(); } /** * 查询返回集合 * * @param hql * @param params * 封装条件的Map集合 * * @return List */ public List<T> queryListByProperties(String hql, Map<String, Object> params) { return HibernateSessionFactory.getSession().createQuery(hql) .setProperties(params).list(); } /** * 查询返回集合 * * @param hql * @param params * 封装条件的对象 * * @return List */ public List<T> queryListByProperties(String hql, Object params) { return HibernateSessionFactory.getSession().createQuery(hql) .setProperties(params).list(); } /** * 查询返回单个对象 * * @param hql * @param params * @return */ public T queryFirst(String hql, Object... params) { return (T) prepareQuery(hql, params).setMaxResults(1).uniqueResult(); } /** * 查询返回单个对象 * * @param hql * @param params * @return */ public T queryFirst(String hql, Map<Object, Object> params) { return (T) prepareQuery(hql, params).setMaxResults(1).uniqueResult(); } /** * 查询返回单个对象 * * @param hql * @param params * 封装条件的Map集合 * * @return */ public T queryFirstByProperties(String hql, Map<String, Object> params) { return (T) HibernateSessionFactory.getSession().createQuery(hql) .setProperties(params).setMaxResults(1).uniqueResult(); } /** * 查询返回单个对象 * * @param hql * @param params * 封装条件的对象 * * @return */ public T queryFirstByProperties(String hql, Object params) { return (T) HibernateSessionFactory.getSession().createQuery(hql) .setProperties(params).setMaxResults(1).uniqueResult(); } /** * 根据主键查询一条数据,立即查询, 若加载的数据不存在,返回NULL * * @param id * * @return */ public T get(Serializable id) { return (T) HibernateSessionFactory.getSession().get(this.clazz, id); } /** * 根据主键查询一条数据,延时加载, 若加载的数据不存在,返回NULL * * @param id * * @return */ public T load(Serializable id) { try { return (T) HibernateSessionFactory.getSession() .load(this.clazz, id); } catch (HibernateException e) { e.printStackTrace(); return null; } } /** * 获取数据的数量 * * @param hql * @param params * @return Integer */ public Integer getCount(String hql, Object... params) { long count = (Long) prepareQuery(hql, params).setMaxResults(1) .uniqueResult(); return (int) count; } /** * 获取数据的数量 * * @param hql * @param params * @return Integer */ public Integer getCount(String hql, Map<Object, Object> params) { long count = (Long) prepareQuery(hql, params).setMaxResults(1) .uniqueResult(); return (int) count; } /** * 获取数据的数量 * * @param hql * @param params * 封装条件的Map集合 * @return Integer */ public Integer getCountByProperties(String hql, Map<String, Object> params) { Query query = HibernateSessionFactory.getSession().createQuery(hql) .setProperties(params); long count = (Long) query.setMaxResults(1).uniqueResult(); return (int) count; } /** * 获取数据的数量 * * @param hql * @param params * 13dce 封装条件的对象 * @return Integer */ public Integer getCountByProperties(String hql, Object params) { Query query = HibernateSessionFactory.getSession().createQuery(hql) .setProperties(params); long count = (Long) query.setMaxResults(1).uniqueResult(); return (int) count; } /** * 投影查询 * * @param hql * @param params * @return */ public List Projection(String hql, Object... params) { return prepareQuery(hql, params).list(); } /** * 投影查询 * * @param hql * @param params * @return */ public List Projection(String hql, Map<Object, Object> params) { return prepareQuery(hql, params).list(); } /** * 投影查询 * * @param hql * @param params * 封装条件的Map集合 * @return */ public List ProjectionByProperties(String hql, Map<String, Object> params) { return HibernateSessionFactory.getSession().createQuery(hql) .setProperties(params).list(); } /** * 投影查询 * * @param hql * @param params * 封装条件的对象 * @return */ public List ProjectionByProperties(String hql, Object params) { return HibernateSessionFactory.getSession().createQuery(hql) .setProperties(params).list(); } /** * 获得唯一结果 * * @param hql * @param params * @return Object */ public Object Single(String hql, Object... params) { return prepareQuery(hql, params).setMaxResults(1).uniqueResult(); } /** * 获得唯一结果 * * @param hql * @param params * @return Object */ public Object Single(String hql, Map<Object, Object> params) { return prepareQuery(hql, params).setMaxResults(1).uniqueResult(); } /** * 获得唯一结果 * * @param hql * @param params * 封装条件的Map集合 * @return Object */ public Object SingleByProperties(String hql, Map<String, Object> params) { return HibernateSessionFactory.getSession().createQuery(hql) .setProperties(params).setMaxResults(1).uniqueResult(); } /** * 获得唯一结果 * * @param hql * @param params * 封装条件的对象 * @return Object */ public Object SingleByProperties(String hql, Object params) { return HibernateSessionFactory.getSession().createQuery(hql) .setProperties(params).setMaxResults(1).uniqueResult(); } /** * 使用hql 语句进行分页查询操作 * * @param hql * 需要查询的hql语句 * @param params * 如果hql有多个参数需要传入,params就是传入的参数数组 * @param pageIndex * 当前页码 * @param pageSize * 每页需要显示的记录数 * @return 当前页的所有记录 */ public List<T> queryForPage(String hql, int pageIndex, int pageSize, Object... params) { return prepareQuery(hql, params) .setFirstResult((pageIndex - 1) * pageSize) .setMaxResults(pageSize).list(); } /** * 使用hql 语句进行分页查询操作 * * @param hql * 需要查询的hql语句 * @param params * 如果hql有多个参数需要传入,params就是传入的Map集合 * @param pageIndex * 当前页码 * @param pageSize * 每页需要显示的记录数 * @return 当前页的所有记录 */ public List<T> queryForPage(String hql, int pageIndex, int pageSize, Map<Object, Object> params) { return prepareQuery(hql, params) .setFirstResult((pageIndex - 1) * pageSize) .setMaxResults(pageSize).list(); } /** * 使用hql 语句进行分页查询操作 参数绑定为条件集合(Map) * * @param hql * 需要查询的hql语句 * @param params * 封装条件的Map集合 * @param pageIndex * 当前页码 * @param pageSize * 每页需要显示的记录数 * @return 当前页的所有记录 */ public List<T> queryForPageByProperties(String hql, int pageIndex, int pageSize, Map<String, Object> params) { return HibernateSessionFactory.getSession().createQuery(hql) .setProperties(params) .setFirstResult((pageIndex - 1) * pageSize) .setMaxResults(pageSize).list(); } /** * 使用hql 语句进行分页查询操作 参数绑定为条件对象 * * @param hql * 需要查询的hql语句 * @param params * 封装条件的对象 * @param pageIndex * 当前页码 * @param pageSize * 每页需要显示的记录数 * @return 当前页的所有记录 */ public List<T> queryForPageByProperties(String hql, int pageIndex, int pageSize, Object params) { return HibernateSessionFactory.getSession().createQuery(hql) .setProperties(params) .setFirstResult((pageIndex - 1) * pageSize) .setMaxResults(pageSize).list(); } /** * 获取分页对象 * * @param hql * @param params * @param pageIndex * 当前页码 * @param pageSize * 每页显示的数量 * @return PageBean */ public PageBean<T> findForPage(String hql, int pageIndex, int pageSize, Object... params) { int totalCount = queryList(hql, params).size(); // 总记录数 List<T> list = queryForPage(hql, pageIndex, pageSize, params); // 把分页信息保存到pageBean中 return new PageBean<T>(list, pageSize, pageIndex, totalCount); } /** * 获取分页对象 * * @param hql * @param params * @param pageIndex * 当前页码 * @param pageSize * 每页显示的数量 * @return PageBean */ public PageBean<T> findForPage(String hql, int pageIndex, int pageSize, Map<Object, Object> params) { int totalCount = queryList(hql, params).size(); // 总记录数 List<T> list = queryForPage(hql, pageIndex, pageSize, params); // 把分页信息保存到pageBean中 return new PageBean<T>(list, pageSize, pageIndex, totalCount); } /** * 获取分页对象 * * @param hql * @param params * 封装条件的Map集合 * @param pageIndex * 当前页码 * @param pageSize * 每页显示的数量 * @return PageBean */ public PageBean<T> findForPageByProperties(String hql, int pageIndex, int pageSize, Map<String, Object> params) { int totalCount = queryListByProperties(hql, params).size(); // 总记录数 List<T> list = queryForPageByProperties(hql, pageIndex, pageSize, params); // 把分页信息保存到pageBean中 return new PageBean<T>(list, pageSize, pageIndex, totalCount); } /** * 获取分页对象 参数绑定为条件对象 * * @param hql * @param params * 封装条件的对象 * @param pageIndex * 当前页码 * @param pageSize * 每页显示的数量 * @return PageBean */ public PageBean<T> findForPageByProperties(String hql, int pageIndex, int pageSize, Object params) { int totalCount = queryListByProperties(hql, params).size(); // 总记录数 List<T> list = queryForPageByProperties(hql, pageIndex, pageSize, params); // 把分页信息保存到pageBean中 return new PageBean<T>(list, pageSize, pageIndex, totalCount); } /** * 新增 * * @param entity * @return boolean */ public boolean save(T entity) { Transaction tx = null; try { Session session = HibernateSessionFactory.getSession(); tx = session.beginTransaction(); session.save(entity); tx.commit(); return true; } catch (HibernateException e) { e.printStackTrace(); if (tx != null) { tx.rollback(); } return false; } } /** * 修改 * * @param entity * @return boolean */ public boolean update(T entity) { Transaction tx = null; try { Session session = HibernateSessionFactory.getSession(); tx = session.beginTransaction(); session.update(entity); tx.commit(); return true; } catch (HibernateException e) { e.printStackTrace(); if (tx != null) { tx.rollback(); } return false; } } /** * 增加或修改 * * @param entity * @return boolean */ public boolean saveOrUpdate(T entity) { Transaction tx = null; try { Session session = HibernateSessionFactory.getSession(); tx = session.beginTransaction(); session.saveOrUpdate(entity); tx.commit(); return true; } catch (HibernateException e) { e.printStackTrace(); if (tx != null) { tx.rollback(); } return false; } } /** * 把一个游离态对象的属性复制到一个持久化对象中,执行更新或插入操作并返回持久化的对像,若传入的是瞬时态对象则保存并返回其副本 * * @param entity * @return */ public T merge(T entity) { Transaction tx = null; try { Session session = HibernateSessionFactory.getSession(); tx = session.beginTransaction(); T result = (T) session.merge(entity); tx.commit(); return result; } catch (HibernateException e) { e.printStackTrace(); if (tx != null) { tx.rollback(); } return null; } } /** * 删除 * * @param entity * @return boolean */ public boolean delete(T entity) { Transaction tx = null; try { Session session = HibernateSessionFactory.getSession(); tx = session.beginTransaction(); session.delete(entity); tx.commit(); return true; } catch (HibernateException e) { e.printStackTrace(); if (tx != null) { tx.rollback(); } return false; } } /** * 删除 * * @param id * @return boolean */ public boolean delete(Serializable id) { Transaction tx = null; try { Session session = HibernateSessionFactory.getSession(); tx = session.beginTransaction(); T entity = get(id); session.delete(entity); tx.commit(); return true; } catch (HibernateException e) { e.printStackTrace(); if (tx != null) { tx.rollback(); } return false; } } /** * 准备query对象 内部调用 * * @param hql * @param params * @return Query */ private Query prepareQuery(String hql, Object... params) { Session session = HibernateSessionFactory.getSession(); 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; } /** * 准备query对象 内部调用 * * @param hql * @param params * @return QueryS */ private Query prepareQuery(String hql, Map<Object, Object> params) { Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery(hql); if (params != null && params.size() > 0) { for (Object key : params.keySet()) { if (key instanceof Integer) { query.setParameter((Integer) key, params.get(key)); } else if (key instanceof String) { query.setParameter((String) key, params.get(key)); } } } return query; } }
PageBean类
package cn.util; import java.util.List; /** * 分页包装对象(包装分页常用属性) * * @author Administrator * */ public class PageBean<T> { private List<T> list;// 当前页列表数据 private int totalCount;// 总记录数 private int totalPages;// 总页数 private int pageSize = 5;// 每页显示多少条 private int pageIndex = 1;// 当前页码 private int prePageIndex;// 上一页码 private int nextPageIndex;// 下一页码 private int firstPageIndex = 1;// 第一页码 private int lastPageIndex;// 最后一页码 private boolean hasPreviousPage;// 是否有上一页 private boolean hasNextPage;// 是否有下一页 private String pagerString;// 分页导航条 /* * 分页包装对象 */ public PageBean() { } /** * PageBean 分页包装对象 * * @param list * 当前页列表数据 * @param pageSize * 每页显示的数量 * @param pageIndex * 当前页码 * @param totalCount * 总记录数 */ public PageBean(List<T> list, int pageSize, int pageIndex, int totalCount) { this.setList(list); this.setPageSize(pageSize); this.setPageIndex(pageIndex); this.setTotalCount(totalCount); } /** * 获得当前页列表数据 * * @return List */ public List<T> getList() { return this.list; } /** * 设置当前页列表数据 * * @param list * @return PageBean */ public PageBean<T> setList(List<T> list) { this.list = list; return this; } /** * 获得总记录数 * * @return int */ public int getTotalCount() { return this.totalCount; } /** * 设置总记录数 * * @param totalCount * @return PageBean */ public PageBean<T> setTotalCount(int totalCount) { this.totalCount = totalCount; return this; } /** * 总页数 * * @return int */ public int getTotalPages() { // 计算出总页数 this.totalPages = (this.totalCount % this.pageSize == 0 ? (this.totalCount / this.pageSize) : (this.totalCount / this.pageSize) + 1); if (this.totalPages < 1) { this.totalPages = 1; } return this.totalPages; } /** * 获得每页显示的数量 * * @return int */ public int getPageSize() { return this.pageSize; } /** * 设置每页显示的数量 * * @param pageSize * @return PageBean */ public PageBean<T> setPageSize(int pageSize) { this.pageSize = pageSize; return this; } /** * 获得当前页码 * * @return int */ public int getPageIndex() { if (this.pageIndex < 1) { this.pageIndex = 1; } if (this.pageIndex > getTotalPages()) { this.pageIndex = getTotalPages(); } return this.pageIndex; } /** * 设置当前页码 * * @param pageIndex * @return PageBean */ public PageBean<T> setPageIndex(int pageIndex) { this.pageIndex = pageIndex; return this; } /** * 上一页 * * @return int */ public int getPrePageIndex() { this.prePageIndex = this.getPageIndex() - 1; if (this.prePageIndex < 1) { this.prePageIndex = getFirstPageIndex(); } return this.prePageIndex; } /** * 下一页 * * @return int */ public int getNextPageIndex() { this.nextPageIndex = this.getPageIndex() + 1; if (this.nextPageIndex > getTotalPages()) { this.nextPageIndex = getTotalPages(); } return this.nextPageIndex; } /** * 首页 * * @return int */ public int getFirstPageIndex() { return this.firstPageIndex; } /** * 尾页 * * @return int */ public int getLastPageIndex() { this.lastPageIndex = this.getTotalPages(); return this.lastPageIndex; } /** * 是否有上一页 * * @return boolean */ public boolean getHasPreviousPage() { this.hasPreviousPage = this.getPageIndex() > 1 ? true : false; return this.hasPreviousPage; } /** * 是否有下一页 * * @return boolean */ public boolean getHasNextPage() { this.hasNextPage = this.getPageIndex() < this.getTotalPages() ? true : false; return this.hasNextPage; } /** * 分页导航条 * @return String */ public String getPagerString() { // 起始数字 int start = this.getPageIndex() - 5 >= 1 ? this.getPageIndex() - 5 : 1; // 结束数字 int end = this.getTotalPages() - start > 10 ? start + 10 : this .getTotalPages(); StringBuffer sbf = new StringBuffer(); sbf.append("<ul class='pager'>"); // 显示首页和上一页 if (this.getHasPreviousPage()) { sbf.append("<li><a href='javascript:ChangePageIndex(" + this.getFirstPageIndex() + ");'>首页</a></li>"); sbf.append("<li><a href='javascript:ChangePageIndex(" + this.getPrePageIndex() + ");'>上一页</a></li>"); } // 显示数字页码 for (int i = start; i <= end; i++) { if (i == this.getPageIndex()) { sbf.append("<li><font class='currentPageIndex'>" + i + "</font></li>"); } else { sbf.append("<li><a href='javascript:ChangePageIndex(" + i + ");'>" + i + "</a></li>"); } } // 显示下一页和尾页 if (this.getHasNextPage()) { sbf.append("<li><a href='javascript:ChangePageIndex(" + this.getNextPageIndex() + ");'>下一页</a></li>"); sbf.append("<li><a href='javascript:ChangePageIndex(" + this.getLastPageIndex() + ");'>尾页</a></li>"); } sbf.append("</ul>"); this.pagerString = sbf.toString(); return pagerString; } }
HibernateSessionFactory 类,这个是MyEclise自动生成的,这里一并贴上
package cn.util; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.cfg.Configuration; /** * * Session工厂类 */ public class HibernateSessionFactory { private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); //使用 AnnotationConfiguration 建立会话工厂 private static Configuration configuration = new AnnotationConfiguration(); private static org.hibernate.SessionFactory sessionFactory; private static String configFile = CONFIG_FILE_LOCATION; static { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err .println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } private HibernateSessionFactory() { } /** * 获得session */ public static Session getSession() throws HibernateException { Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) { if (sessionFactory == null) { rebuildSessionFactory(); } session = (sessionFactory != null) ? sessionFactory.openSession() : null; threadLocal.set(session); } return session; } /** * 重新获得session * */ public static void rebuildSessionFactory() { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err .println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } /** * 关闭session * * @throws HibernateException */ public static void closeSession() throws HibernateException { Session session = (Session) threadLocal.get(); threadLocal.set(null); if (session != null) { session.close(); } } /** * 获得sessionfactory * */ public static org.hibernate.SessionFactory getSessionFactory() { return sessionFactory; } /** * 设置配置文件 */ public static void setConfigFile(String configFile) { HibernateSessionFactory.configFile = configFile; sessionFactory = null; } /** * 获得Configuration * */ public static Configuration getConfiguration() { return configuration; } }
好了,这样就不必每次都写一堆繁琐重复的代码了。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树