• Hibernate里面如何使用DetachedCriteriaCriteria 实现多条件分页查询


    WEB层:

    // 获取分页的请求参数
    String start = request.getParameter("start");
    String page = request.getParameter("page");
    String limit = request.getParameter("limit");

    //获取请求表单的值,然后根据值是否为空,构件离线查询条件。
    String tb_zzid = request.getParameter("tb_zzid");
    String zc_xmbh = request.getParameter("zc_xmbh");
    String zy_xmbh = request.getParameter("zy_xmbh");
    String zc_zcly = request.getParameter("zc_zcly");

    DetachedCriteria criteria=DetachedCriteria.forClass(Zyzc.class);

    if(tb_zzid !=null && !"".equals(tb_zzid))
    {
    criteria.add(Restrictions.like("tb_zzid", tb_zzid, MatchMode.ANYWHERE));
    }
    if(zc_xmbh !=null && !"".equals(zc_xmbh))
    {
    criteria.add(Restrictions.like("zc_xmbh", zc_xmbh, MatchMode.ANYWHERE));
    }
    if(zy_xmbh !=null && !"".equals(zy_xmbh))
    {
    criteria.add(Restrictions.like("zy_xmbh", zy_xmbh, MatchMode.ANYWHERE));
    }
    if(zc_zcly !=null && !"".equals(zc_zcly))
    {
    criteria.add(Restrictions.like("zc_zcly", zc_zcly, MatchMode.ANYWHERE));
    }

    --------------------------------

    然后就可以调用service层的方法

    //获取根据离线条件查询的记录;

    es.getZyzcsByConditonPage( criteria,Integer.parseInt(page), Integer.parseInt(limit))

    //获取根据离线条件查询的记录总数;

    es.getZyzcCountByCondition(criteria)

    ---------------------------------------------------------------------------------------------------------

    SERVICE层:

    //调用DAO层方法
    public long getZyzcCountByCondition(DetachedCriteria criteria) {
    // TODO Auto-generated method stub
    try
    {
    return zyzcDao.findCountByCondition(criteria);
    }
    catch (Exception e)
    {
    e.printStackTrace();
    throw new ElecException("获取发电记录列表出错");
    }
    }

    //调用DAO方法获取记录总数
    public List<Zyzc> getZyzcsByConditonPage(DetachedCriteria criteria, int pageNo, int pageSize)
    {

    List<Zyzc> result = new ArrayList<Zyzc>();
    try
    {
    List el = zyzcDao.findByConditionPage(criteria, pageNo, pageSize);
    for (Object o : el)
    {
    Zyzc e = (Zyzc)o;
    result.add(e);
    }
    return result;
    }
    catch (Exception e)
    {
    e.printStackTrace();
    throw new ElecException("获取发电记录列表出错");
    }
    }

    --------------------------------------------------------------------

    DAO层:

    //继承hibernate4公共基础类,获取session,然后执行离线查询;

    public class ZyzcDAOImpl extends BaseDaoHibernate4<Zyzc> implements ZyzcDAO
    {

    public List findByConditionPage(DetachedCriteria criteria, int pageNo,int pageSize)
    {
    Criteria c =criteria.getExecutableCriteria(getSessionFactory().getCurrentSession());
    // 执行分页,并返回查询结果
    return c.setProjection(null)
    .setFirstResult((pageNo - 1) * pageSize)
    .setMaxResults(pageSize)
    .list();
    }

    // 获取查询记录结果总数,用于分页;
    public long findCountByCondition(DetachedCriteria criteria)
    {
    Criteria c =criteria.getExecutableCriteria(getSessionFactory().getCurrentSession());
    c.setProjection(Projections.rowCount());
    Long totalNum =(Long) c.uniqueResult();
    return totalNum;
    }

    }

    ----------------------------------------------

    结果演示:

    未设置任何条件时,显示记录总数量;

    设置条件后,显示查询结果总数。

  • 相关阅读:
    LeetCode113. 路径总和 II
    LeetCode257. 二叉树的所有路径
    LeetCode222. 完全二叉树的节点个数
    LeetCode404. 左叶子之和
    LeetCode110. 平衡二叉树
    LeetCode101. 对称二叉树
    LeetCode100. 相同的树
    llustrator CC2017下载AI2020
    vs code 代码格式化整理
    人生格言
  • 原文地址:https://www.cnblogs.com/mannixiang/p/6610138.html
Copyright © 2020-2023  润新知