Javaweb实现分页查询,简单易懂

为什么要使用分页查询

在Java应用程序中,数据查询是必不可少的功能。但当处理大量数据时,一次性查询所有数据会导致性能下降、服务器响应时间变长,内存溢出等问题。而使用分页查询,可以将查询结果分割成多个部分,每次只查询部分数据,从而提高性能、减少内存消耗、提高用户体验和数据安全性。

Javaweb实现分页查询,简单易懂_第1张图片

因为页面上有大量的数据需要我们经行处理,所有就要封装一个Page类

Page类

成员变量

Javaweb实现分页查询,简单易懂_第2张图片

构造方法,我们可以在构造方法中写算法,当我们new Page时它就会执行

Javaweb实现分页查询,简单易懂_第3张图片

dao

这里需要两个方法,一个统计全部教师数据,一个实现分页查询

分页查询

/**
     * 分页查询
     * @param pageNum
     * @param pageSize
     * @return
     */
    @Override
    public List findTeacherByPage(Integer pageNum, Integer pageSize) {
        List list = new ArrayList();
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = DBUtils.dbUtils();
            String sql = "SELECT id,username,password,gender,email,remark FROM teacher limit ?,?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1,pageNum);
            ps.setInt(2,pageSize);
            rs = ps.executeQuery();
            while (rs.next()){
                Teacher teacher = new Teacher(
                        rs.getInt("id"),
                        rs.getString("username"),
                        rs.getString("password"),
                        rs.getString("gender"),
                        rs.getString("email"),
                        rs.getString("remark"));
                list.add(teacher);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        DBUtils.dbClose(conn,ps,rs);
        return list;
    }

统计数量

/**
     * 统计所有教师
     * @return
     */
    @Override
    public int findTeacherNum() {
        int aLong = 0;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = DBUtils.dbUtils();
            String sql = "SELECT count(*) from teacher";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while (rs.next()){
              aLong = rs.getInt(1);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        DBUtils.dbClose(conn,ps,null);
        return aLong;
    }

service

在service中可以获得分页数据和统计数量,所有service的返回值需要一个Page来将数据保存

/**
     * 分页
     * @param nowPage
     * @return
     */
    @Override
    public Page showPageTeacher(Integer nowPage) {
        TeacherDao teacherDao = new TeacherDaoImpl();
        int count = teacherDao.findTeacherNum();
        Page page = new Page(nowPage,count);
        List list = teacherDao.findTeacherByPage(page.getPageNum(),page.getPageRecord());
        page.setList(list);
        return page;
    }

controller

String action = req.getParameter("action");

        /**
         * 显示用户
         */

        if ("showAllTeacher".equals(action)){
            int nowPage = Integer.parseInt(req.getParameter("nowPage"));
            TeacherService teacherService = new TeacherServiceImpl();
            Page page = teacherService.showPageTeacher(nowPage);
            req.getSession().setAttribute("page",page);
            resp.sendRedirect("/schoolproject/pages/teacher_infor.jsp");
        }

jsp

Javaweb实现分页查询,简单易懂_第4张图片

当我们要进入分页时,要传递值,让nowPage(当前页)值为1,如果不想传递参数就要给nowPage赋初始值为一

到这里,Javaweb实现分页查询,简单易懂就结束了,希望对你有帮助!!!

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