该教程基于Hibernate4.5,所有代码均为个人所写,欢迎参考,拒绝转载
1.BaseEntity
2.BaseDao
@Repository("serviceDao")
public class BaseDaoHandy<T> {
protected Log log = Log.getLogger(this.getClass());
@Resource
protected SessionFactory sessionFactory;
public Session getSession() {
Session session = null;
try {
session = sessionFactory.openSession();
// session = sessionFactory.getCurrentSession();
// if (!session.isOpen()) {
// session = sessionFactory.openSession();
// }
} catch (Exception e) {
session = sessionFactory.openSession();
}
return session;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public T saveEntity(T t) {
Session session = this.getSession();
Transaction tran = session.beginTransaction();
session.save(t);
tran.commit();
session.flush();
session.close();
return t;
}
public boolean delectEntity(T t) {
Session session = this.getSession();
Transaction transaction = session.beginTransaction();
session.delete(t);
transaction.commit();
session.flush();
session.close();
// if(session.isOpen()){
// }
return true;
}
public T updateEntity(T t) {
Session session = this.getSession();
Transaction tran = session.beginTransaction();
session.update(t);
tran.commit();
session.flush();
session.close();
return t;
}
public T findOneById(T t, Integer id) {
Session session = this.getSession();
t = (T) session.get(t.getClass(), id);
session.close();
return t;
}
/**
* 根据完整的 HQL 进行查找
* TODO 输入查询参数
*
* @param hql
* @param
* @return
*/
public List<T> findByHQL(String hql) {
Session session = this.getSession();
if (hql == null) {
return null;
}
Query query = session.createQuery(hql);
List<T> list = query.list();
session.close();
return list;
}
/**
* 分页查询
*
* @param
*/
public PageModule<T> findByPage(T t,PageAbstract pageAbstract) {
return findByPage(t, pageAbstract, null);
// PageModule pageModule = new PageModule<T>();
// Session session = this.getSession();
// //开启事务
// session.beginTransaction();
// String hql = StringTools.getHQL(t, page);
// Query query = session.createQuery(hql);
// int count = query.list().size();
// pageModule.setPageCount(count);
// int pageNum = 1;
// if(page!=null && page.getCurrentPage() != null && page.getCurrentPage()>1){
// pageNum = page.getCurrentPage();
// }
// int rows = Cons.Sort.DefaultPageSize;
// if(page.getPageSize()!=null && page.getPageSize()>0){
// rows = page.getPageSize();
// }
// query.setFirstResult((pageNum - 1)*rows);
// query.setMaxResults(rows);
// List<T> list = query.list();
// pageModule.setPageContent(list);
// pageModule.setCurrentPage(pageNum);
// pageModule.setHasMore(pageModule.getPageCount()>pageModule.getCurrentPage());
// pageModule.setPageSize(rows);
// return pageModule;
}
//TODO
public PageModule<T> findByPage(T t,PageAbstract pageAbstract, Map searchParam) {
PageModule pageModule = new PageModule<T>();
Session session = this.getSession();
//开启事务
// session.beginTransaction();
String hql = StringTools.getHQL(t, pageAbstract, searchParam);
Query query = session.createQuery(hql);
int count = query.list().size();
Page pageReturnData = new Page();
int pageNum = 1;
if (pageAbstract != null && pageAbstract.getPageNum() != null && pageAbstract.getPageNum() > 1) {
pageNum = pageAbstract.getPageNum();
}
int rows = Cons.Sort.DefaultPageSize;
if (pageAbstract.getPageSize() != null && pageAbstract.getPageSize() > 0) {
rows = pageAbstract.getPageSize();
}
pageReturnData.setPageCount((int) Math.ceil(((double) count) / rows));
query.setFirstResult((pageNum - 1) * rows);
query.setMaxResults(rows);
List<T> list = query.list();
pageReturnData.setPageNum(pageNum);
pageReturnData.setHasMore(pageReturnData.getPageCount() > pageReturnData.getPageNum());
pageReturnData.setPageSize(rows);
if (!StringTools.isEmpty(pageAbstract.getOrder())) {
pageReturnData.setOrder(pageAbstract.getOrder());
}
if (!StringTools.isEmpty(pageAbstract.getSortby())) {
pageReturnData.setSortby(pageAbstract.getSortby());
}
pageModule.setPageContent(list);
pageModule.setPage(pageReturnData);
if (session.isOpen()) {
session.close();
}
return pageModule;
}
}
3.BaseService
@Service public class BaseServiceDefault<E> { //TODO 自动注入DAO 层 @Autowired(required = false) protected BaseDaoHandy<E> serviceDao; /** * 增加 * @param entity * @return */ public E saveEntity(E entity){ return serviceDao.saveEntity(entity); } public E updateEntity(E entity){ return serviceDao.updateEntity(entity); } /** * 删除 * @param entity * @return */ public boolean delectEntity(E entity){ return serviceDao.delectEntity(entity); } /** * 根据 HQL 查找 * @param hql * @return */ public List<E> findByHql(String hql){ return serviceDao.findByHQL(hql); } /** * 根据 ID 进行查找 * @param e * @param id * @return */ public E findOneById(E e ,Integer id){ return serviceDao.findOneById(e, id); } public PageModule<E> findByPage(E e,PageAbstract pageAbstract){ return serviceDao.findByPage(e, pageAbstract); } public PageModule<E> findByPage(E e,PageAbstract pageAbstract,Map searchParam){ return serviceDao.findByPage(e,pageAbstract,searchParam); } }
4.工具类,分页查询拼装
//TODO String int public static <T> String getHQL(T t, PageAbstract page, Map<String, Object> searchParam) { String name = t.getClass().getSimpleName(); String hql = "select e from " + name + " e "; if (searchParam != null && searchParam.size() > 0) { hql = hql + " where "; boolean bar = true; for (String key : searchParam.keySet()) { if (searchParam.get(key) == null) { continue; } bar = false; int i = key.indexOf("_"); String operator = key.substring(0, i); String param = key.substring(i + 1, key.length()); if (operator.equals("EQ")) { hql = hql + " e." + param + EnumQuery.EQ.getValue() + "'" + searchParam.get(key) + "' and "; } else if (operator.equals("INTEQ")) { hql = hql + " e." + param + EnumQuery.INTEQ.getValue() + searchParam.get(key) + " and "; } else if (operator.equals("Like")) { hql = hql + " e." + param + EnumQuery.Like.getValue() + "'%" + searchParam.get(key) + "%' and "; } else if (operator.equals("GT")) { hql = hql + " e." + param + EnumQuery.GT.getValue() + "'" + searchParam.get(key) + "' and "; } else if (operator.equals("LT")) { hql = hql + " e." + param + EnumQuery.LT.getValue() + "'" + searchParam.get(key) + "' and "; } else if (operator.equals("IN")) { String value = String.valueOf(searchParam.get(key)); String[] values = value.split(Cons.Permission.Separator); if (values.length <= 0) { continue; } hql = hql + "e." + param + " in ( "; for (int j = 0; j < values.length; j++) { hql = hql + " '" + values[j] + "',"; } hql = hql.substring(0, hql.length() - 1); hql = hql + ") and "; } else if (operator.equals("INTNEQ")) { hql = hql + " e." + param + EnumQuery.INTNEQ.getValue() + searchParam.get(key) + " and "; } else if (operator.equals("NEQ")) { hql = hql + " e." + param + EnumQuery.NEQ.getValue() + "'" + searchParam.get(key) + "' and "; } } if (bar) { hql = hql.substring(0, hql.lastIndexOf("where")); } else { hql = hql.substring(0, hql.lastIndexOf("and")); } } if (page != null) { String order = page.getOrder(); if (order == null || order.equals("")) { order = Cons.Sort.Desc; } String sortby = Cons.Sort.DefaultSortby; if (!StringTools.isEmpty(page.getSortby())) { sortby = page.getSortby(); } hql = hql + "order by " + sortby + " " + order; } return hql; }
5.枚举
public enum EnumQuery implements IEnum { EQ(1, " = "), Like(2, " like "), GT(3, " > "), LT(4, " < "), IN(5, " IN "), INTEQ(6, " = "),// String 逗号分隔 INTNEQ(7, " != "), NEQ(8, " != "); //------------------instance methods ------------------------- private int code; private String value; private EnumQuery(int code, String value) { this.code = code; this.value = value; } public int getCode() { return code; } public String getValue() { return value; } }