MySQL数据库+jsp+servlet实现分页查询

    前一段做的那个jsp+servlet的小项目用到了分页查询,今天总结到博客上面,以后忘记了自己可以看,也分享给大家.

    这个项目使用的数据库是MySQL,在MySQL数据库中使用

select user_id,username from user limit  (pageNo-1)*pageSize,pageSize

就可以达到分段查询的目的,pageNo是页码数,pageSize是每页的容量,如果pageNo=1,pageSize=5的话,那就是取前五条数据,那第二页就是取出5-10条数据,依次类推.

    在这个项目的util包中加入了一个pageUtil的工具类,这个类主要是封装每页显示的数据,比如pageNo(当前页码),pageSize(每页要显示的数据条数),totalCount,(总记录的条数),data(当前页的数据集合),totalPage(总页数),这个类中的代码如下:

package com.team5.util;

import java.util.List;

import com.team5.hurui.bean.Dope;

/**
 * 分页工具类(封装每页需要显示的数据)
 * 
 * @author 
 * 
 */
public class PageUtil {
    // 当前页页码(1,2,3....)
    private int pageNo;

    // 每页显示条数
    private int pageSize;

    // 总记录(条数)
    private int totalCount;

    // 当前页数据集合
    private List data;

    // 总页数
    private int totalPage;

    /**
     * 构造方法,传递每页条数和总记录数
     * 
     * @param 每页显示条数
     * @param 总记录数
     */
    public PageUtil(int pageSize, int totalCount) {
        this.pageSize = pageSize;
        this.totalCount = totalCount;
        if (this.totalCount % this.pageSize == 0) {
            // 计算总页数
            this.totalPage = this.totalCount / this.pageSize;
        } else {
            this.totalPage = this.totalCount / this.pageSize + 1;
        }
    }

    public List getData() {
        return data;
    }

    public void setData(List data) {
        this.data = data;
    }

    public int getPageNo() {
        return pageNo;
    }

    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
    }

    public int getPageSize() {
        return pageSize;
    }

    public int getTotalCount() {
        return totalCount;
    }

    public int getTotalPage() {
        return totalPage;
    }

}

之后在dao类的实现类中使用prepareStatement的executeQuery()方法查询出每条数据的属性值,并将其赋给bean类中写好的实体类的属性中,然后将实体类的对象放在一个list中,再将这个list给pageUtil类的data集合.
dao的实现类中有关分页的代码:


     //根据页码和每页的容量来得到数据
    @Override
    public PageUtil getPage(int pageNo, int pageSize) {
        Connection conn = DBManager.getConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;
        List list = new ArrayList();
        PageUtil page = null;
        try {
            //获取总数据条数
            int totalCount = 0; 
            ps = conn.prepareStatement("select count(user_id) from user");
            rs = ps.executeQuery();
            while(rs.next()){
                totalCount = rs.getInt(1);
            }
            ps = conn.prepareStatement("select user_id,username from user limit " + (pageNo-1)*pageSize+","+pageSize);
            rs = ps.executeQuery();
            while(rs.next()){
                User user = new User();
                user.setUser_id(rs.getInt(1));
                user.setUsername(rs.getString(2));
                list.add(user);
            }
            page = new PageUtil(pageSize, totalCount);
            page.setData(list);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            DBManager.closeAll(rs, ps, conn);
        }

        return page;
    }

然后在servlet中使用request.getParameter(“pageNo”)来获取到当前的页码数,接下来的代码:

//设置每页显示十条数据
            PageUtil page = usi.getPage(pageNo, 10);
            page.setPageNo(pageNo);
            request.setAttribute("page", page);
            request.getRequestDispatcher("admin/showUserList.jsp").forward(request, response);

设置每页显示的数据条数,然后page对象传递给jsp,在jsp中使用foreach循环:

<c:forEach var="list" items="${page.data}">
            <tr>
              <td align="center" class="altbg2"><input name="item" type="checkbox" id="item" value="${list.user_id}" >td>
                <td align="center" class="altbg2">
                    ${list.username}
                td>
                <td class="altbg2" align="center">
                    ${list.user_id} 
                td>
                <td class="altbg2" align="center">
                td>
            tr>

        c:forEach>


<tr><td class="altbg2" colspan="7" rowspan="2" align="right">
                总共【${page.totalPage}】页   ${page.pageNo}/${page.totalPage}   <a href="zcUserServlet?method=showPage&pageNo=1">首页a> <c:choose>
                    <c:when test="${requestScope.page.pageNo > 1}">
                        <a href="zcUserServlet?method=showPage&pageNo=${page.pageNo-1}">上一页a>
                    c:when>
                    <c:otherwise>
                        上一页
                    c:otherwise>
                c:choose>

                <c:choose>
                    <c:when test="${page.pageNo < page.totalPage}">
                        <a href="zcUserServlet?method=showPage&pageNo=${page.pageNo+1}">下一页a>
                    c:when>
                    <c:otherwise>
                        下一页
                    c:otherwise>
                c:choose>
                  <a href="zcUserServlet?method=showPage&pageNo=${page.totalPage}">尾页a>          td>
            tr>

这样把page对象传递过来之后就可以调用pageUtil类中的属性了.这样分页基本就做完了,当然,如果想做的更好看点,还可以使用pagination之类的插件.

你可能感兴趣的:(java,web)