• 分页查询的具体实现


    首先,我们应该定义一个PageBean类,在类里我们封装分页查询所需要的各种属性以及生成各属性的get和set方法:

     1       //当前页
     2     private Integer currentPage;
     3     //总记录数
     4     private Integer totalCount;
     5     //每页显示的记录数
     6     private Integer pageSize;
     7     //总页数
     8     private Integer totalPage;
     9     //开始位置
    10     private Integer begin;
    11     //每页记录的list集合
    12     private List<Customer> list;

    然后,在action中定义了一个方法listpage,在listpage中获取页面所传过来的当前页,然后调用sercvice方法完成封装:

    1 public String listpage() {
    2         //调用service方法完成封装
    3         PageBean pageBean = customerService.listpage(currentPage);
    4         ServletActionContext.getRequest().setAttribute("pageBean", pageBean);
    5         return "listpage";
    6     }

    随后我们要在service方法中完成具体的封装:

     1 public PageBean listpage(Integer currentPage) {
     2         PageBean pageBean = new PageBean();
     3         //当前页
     4         pageBean.setCurrentPage(currentPage);
     5         //总记录数
     6         int totalCount = customerDao.findcount();
     7         pageBean.setTotalCount(totalCount);
     8         //每页显示记录数
     9         int pageSize = 3;
    10         pageBean.setPageSize(pageSize);
    11         //总页数 总记录数除以每页显示的记录数
    12         //判断是否能够整除
    13         int totalPage=0;
    14         if(totalCount%pageSize==0){
    15             totalPage = totalCount/pageSize;
    16         }else {
    17             totalPage = totalCount/pageSize+1;
    18         }
    19         pageBean.setTotalPage(totalPage);
    20         //开始位置
    21         int begin = (currentPage-1)*pageSize;
    22         pageBean.setBegin(begin);
    23         
    24         //每页纪录的list集合
    25         List<Customer> list = customerDao.findPage(begin,pageSize);
    26         pageBean.setList(list);
    27         return pageBean;
    28     }

    然后,在dao中写具体的查询总记录数和分页查询的方法,这里一共有两种方式;

     1 //查询记录数
     2     public int findcount() {
     3         @SuppressWarnings("all")
     4         List<Object> list = (List<Object>) this.getHibernateTemplate().find("select count(*) from Customer");
     5         //从list中把值得到
     6         if(list!=null && list.size()!=0){
     7             Object obj = list.get(0);
     8             Long lobj = (Long) obj;
     9             int count = lobj.intValue();
    10             return count;
    11         }
    12         return 0;
    13     }
    14 
    15     //分页查询操作
    16     @SuppressWarnings("all")
    17     public List<Customer> findPage(int begin, int pageSize) {
    18         //1.使用hibernate底层代码实现
    19 //        SessionFactory sessionFactory = this.getHibernateTemplate().getSessionFactory();
    20 //        Session session = sessionFactory.getCurrentSession();
    21 //        Query query = session.createQuery("from Customer");
    22 //        query.setFirstResult(begin);
    23 //        query.setMaxResults(pageSize);
    24 //        List<Customer> list = query.list();
    25         
    26         //2.使用离线对象和hibernate模版实现
    27         //创建离线对象,设置对哪个实体类进行操作
    28         DetachedCriteria criteria = DetachedCriteria.forClass(Customer.class);
    29         //调用hibernateTemplete进行操作
    30         List<Customer> list = (List<Customer>) this.getHibernateTemplate().findByCriteria(criteria, begin, pageSize);
    31         return list;
    32     }

    最后在页面显示是应该判断当前页是否是第一页或最后一页

    1 共[<B>${pageBean.totalCount}</B>]条记录,共[<B>${pageBean.totalPage}</B>]页
    2  ,当前第[<b>${pageBean.currentPage}</b>]页
    3  <c:if test="${pageBean.currentPage!=1}">
    4  [<A href="${pageContext.request.contextPath }/customer_listpage.action?currentPage=${pageBean.currentPage-1}">前一页</A>]
    5   </c:if>
    6  <c:if test="${pageBean.currentPage!=pageBean.totalPage}">
    7  [<A href="${pageContext.request.contextPath }/customer_listpage.action?currentPage=${pageBean.currentPage+1}">后一页</A>] 
    8                                                 </c:if>
  • 相关阅读:
    生产者消费者问题 一个生产者 两个消费者 4个缓冲区 生产10个产品
    三个线程交替数数 数到100
    c++ 字符串去重
    Java中一个方法只被一个线程调用一次
    GEF开发eclipse插件,多页编辑器实现delete功能
    python-arp 被动信息收集
    ssrf
    TCP
    xxe
    越权
  • 原文地址:https://www.cnblogs.com/cuibin/p/6740526.html
Copyright © 2020-2023  润新知