ssh中分页

1.写一个JavaBean

import java.util.List;
public class PageBean {
    private Integer currentPage;//当前页
    private Integer totalPage;//总页数
    private Integer totalCount;//总纪录数
    private Integer pageCount;//每页记录数
    private Integer begin;//开始位置
    private List<Reader> listReader;//每页显示的集合   
    //生成set、get方法
    //....
}

2.action中使用属性封装获取

//使用属性封装获取
    private Integer currentPage =1;

    public Integer getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(Integer currentPage) {
        this.currentPage = currentPage;
    }

    public String listByPage(){

        PageBean pageBean = readerService.listByPage(currentPage);

        ServletActionContext.getRequest().setAttribute("pageBean", pageBean);
        return "listByPage";
    }

3.service层写逻辑

public PageBean listByPage(Integer currentPage) {
        //创建PageBean对象
        PageBean pageBean = new PageBean();
        //当前页
        pageBean.setCurrentPage(currentPage);
        //总记录数
        int totalCount = readerDao.findCount();
        pageBean.setTotalCount(totalCount);
        //每页显示记录数
        int pageSize = 3;//自己设置
        //总页数=总记录数除以每页显示记录数
        int totalPage = 0;
        if(totalCount%pageSize==0){//如果能整除
            totalPage = totalCount/pageSize;
        }else{//如果不能整除
            totalPage = totalCount/pageSize+1;
        }
        //封装到PageBean中
        pageBean.setTotalPage(totalPage);
        //开始位置=(当前页-1)*每页纪录数
        int begin = (currentPage-1)*pageSize;
        //每页纪录的list集合
        List<Reader> list = readerDao.findByPage(begin,pageSize);

        pageBean.setListReader(list);
        return pageBean;
    }

4.dao层实现

//查询总记录数
public int findCount() {

        List<Object> list = (List<Object>) this.getHibernateTemplate().find("select count(*) from Reader");
        if(list.size()!=0&&list!=null){
            Object obj = list.get(0);
            Long lobj = (Long)obj;
            int count = lobj.intValue();
            return count;
        }
        return 0;
    }
//查询分页的list
public List<Reader> findByPage(int begin, int pageSize) {
        //第一种方法:使用hibernate底层代码实现
        //得到sessionFactory
//      SessionFactory sessionFactory = this.getHibernateTemplate().getSessionFactory();
//       //得到session对象
//      Session session = sessionFactory.getCurrentSession();
//      //设置分页的信息
//      Query query = session.createQuery("from Reader");
//      query.setFirstResult(begin);
//      query.setMaxResults(pageSize);
//      List<Reader> list = query.list();

        //第二种方法:使用离线对象和hibernateTemplate的方法实现
        //1.创建离线对象,设置对哪个实体类进行操作
        DetachedCriteria criteria = DetachedCriteria.forClass(Reader.class);
        //2.调用HibernateTemplate中的方法
        //第一个参数是离线对象,第二个参数是开始位置,第三个参数是每页记录数
        List<Reader> list = (List<Reader>) this.getHibernateTemplate()
                .findByCriteria(criteria, begin, pageSize);

        return list;
    }

5.jsp页面显示

<body>
<table>
        <tr>
            <td>读者名称</td>
            <td>读者地址</td>
            <td>读者手机</td>
        </tr>
        <c:forEach items="${pageBean.listReader }" var="reader">
            <tr>
                <td>${reader.readName }</td>
                <td>${reader.address }</td>
                <td>${reader.readPhone }</td>
                <td><a href="${pageContext.request.contextPath }/reader_change.action?id=${reader.rid}">修改</a></td>
            </tr>
        </c:forEach>    
    </table>
    <div style="line-height: 20px;height:20px;text-align:right">
        共[<b>${pageBean.totalCount }</b>]条记录,共[<b>${pageBean.totalPage }</b>]页,
        当前第[<b>${pageBean.currentPage }</b>]页
        <!-- 前一页表示当前页减一
            判断如果是第一页,就没有前一页
         -->
         <c:if test="${pageBean.currentPage!=1 }">
            [<a href="${pageContext.request.contextPath }/reader_listByPage.action?currentPage=${pageBean.currentPage-1}">前一页</a>]
         </c:if>
        <!-- 当前页+1 
            如果最后一页就没有后一页
        -->
        <c:if test="${pageBean.currentPage!=pageBean.totalPage }">
            [<a href="${pageContext.request.contextPath }/reader_listByPage.action?currentPage=${pageBean.currentPage+1}">后一页</a>
        </c:if>
        </div>
</body>

猜你喜欢

转载自blog.csdn.net/pianpiannia/article/details/76578183