Hibernate二次封装

该教程基于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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值