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

为什么要使用分页查询

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

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

Page类

成员变量

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

dao

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

分页查询

/**
     * 分页查询
     * @param pageNum
     * @param pageSize
     * @return
     */
    @Override
    public List<Teacher> findTeacherByPage(Integer pageNum, Integer pageSize) {
        List<Teacher> 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<Teacher> 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

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

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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java Web 中,如果你不想使用 JSP 来实现分页查询,你可以使用 Servlet + JDBC 来实现。 具体来说,你可以先通过 Servlet 接收用户提交的查询请求,然后将查询条件传递给 DAO 层(使用 JDBC 连接数据库),DAO 层通过查询数据库获取符合条件的数据,并计算出总记录数和总页数,最后将查询结果和分页信息返回给 ServletServlet 再将查询结果和分页信息封装成一个 JavaBean 对象(或者使用 Map),并将其存储到 request 或 session 中,最后转发到结果页面进行展示。 下面是一个简单的示例代码,假设我们要实现查询一个学生信息表(student)的分页查询功能: ``` // 在 Servlet 中接收查询请求并调用 DAO 层 public class StudentServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int currentPage = Integer.parseInt(request.getParameter("currentPage")); // 当前页数 int pageSize = Integer.parseInt(request.getParameter("pageSize")); // 每页记录数 String name = request.getParameter("name"); // 查询条件:姓名 String gender = request.getParameter("gender"); // 查询条件:性别 StudentDao dao = new StudentDao(); List<Student> students = dao.findStudents(name, gender, currentPage, pageSize); // 调用 DAO 层进行查询 int totalCount = dao.getTotalCount(name, gender); // 获取总记录数 int totalPage = (totalCount + pageSize - 1) / pageSize; // 计算总页数 // 将查询结果和分页信息封装成一个 JavaBean 对象,并存储到 request 中 PageBean pageBean = new PageBean(); pageBean.setCurrentPage(currentPage); pageBean.setPageSize(pageSize); pageBean.setTotalCount(totalCount); pageBean.setTotalPage(totalPage); pageBean.setStudents(students); request.setAttribute("pageBean", pageBean); // 转发到结果页面进行展示 request.getRequestDispatcher("/result.jsp").forward(request, response); } } // 在 DAO 层中实现分页查询功能 public class StudentDao { public List<Student> findStudents(String name, String gender, int currentPage, int pageSize) { List<Student> students = new ArrayList<>(); Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = DBUtil.getConnection(); // 获取数据库连接 String sql = "SELECT * FROM student WHERE 1=1"; if (name != null && !"".equals(name.trim())) { sql += " AND name LIKE ?"; } if (gender != null && !"".equals(gender.trim())) { sql += " AND gender = ?"; } sql += " LIMIT ?, ?"; pstmt = conn.prepareStatement(sql); int index = 1; if (name != null && !"".equals(name.trim())) { pstmt.setString(index++, "%" + name + "%"); } if (gender != null && !"".equals(gender.trim())) { pstmt.setString(index++, gender); } pstmt.setInt(index++, (currentPage - 1) * pageSize); pstmt.setInt(index++, pageSize); rs = pstmt.executeQuery(); while (rs.next()) { Student student = new Student(); student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setGender(rs.getString("gender")); student.setAge(rs.getInt("age")); students.add(student); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(rs, pstmt, conn); // 释放资源 } return students; } public int getTotalCount(String name, String gender) { int totalCount = 0; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = DBUtil.getConnection(); // 获取数据库连接 String sql = "SELECT COUNT(*) FROM student WHERE 1=1"; if (name != null && !"".equals(name.trim())) { sql += " AND name LIKE ?"; } if (gender != null && !"".equals(gender.trim())) { sql += " AND gender = ?"; } pstmt = conn.prepareStatement(sql); int index = 1; if (name != null && !"".equals(name.trim())) { pstmt.setString(index++, "%" + name + "%"); } if (gender != null && !"".equals(gender.trim())) { pstmt.setString(index++, gender); } rs = pstmt.executeQuery(); if (rs.next()) { totalCount = rs.getInt(1); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(rs, pstmt, conn); // 释放资源 } return totalCount; } } // 封装分页信息和查询结果的 JavaBean public class PageBean { private int currentPage; // 当前页数 private int pageSize; // 每页记录数 private int totalCount; // 总记录数 private int totalPage; // 总页数 private List<Student> students; // 查询结果 // 省略 getter 和 setter 方法 } ``` 在上面的示例代码中,我们使用了一个名为 PageBean 的 JavaBean 来封装分页信息和查询结果。在 DAO 层中,我们分别实现了 findStudents() 方法和 getTotalCount() 方法来进行分页查询。在 Servlet 中,我们接收用户提交的查询请求,然后调用 DAO 层进行查询,并将查询结果和分页信息封装成一个 PageBean 对象,最后转发到结果页面进行展示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值