分页查询

1分页显示

1.1准备数据

创建数据表

Create table User(

Id int primary key auto_increment,

Uname varchar(30) not null,

Uage int

);

 

创建项目,添加相关的工具类和jar文件。

编写测试类循环的添加128条数据:

public class TestInsertData {

 

    @Test

    public void testInserData() throws SQLException {

       QueryRunner qr = new QueryRunner(JDBCUtils.getDateSource());

       for(int i = 0;i<128;i++)

           qr.update("insert into user(uname,uage) values(?,?)","鸣人"+i,20);

    }

}

 

1.2 页面和项目的结构

添加页面

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>鸣人的列表</title>

</head>

<body>

<table align="center" width="300" border="1">

    <tr>

       <th>#</th>

       <th>姓名</th>

       <th>年龄</th>

    </tr>

    <c:forEach items="${users }" var="u">

       <tr>

           <td>${u.id }</td>

           <td>${u.uname }</td>

           <td>${u.uage }</td>

       </tr>

    </c:forEach>

</table>

<p>

    当前第89/128

    <a href="">首页</a>

    <a href="">上一页</a>

    <a href="">下一页</a>

    <a href="">尾页</a>

</p>

</body>

</html>

 

添加dao和service

1.3底层实现

DOA层:

分页查询数据的方法 queryByPage(int size,int page);

查询总条数的方法 queryCount();

package com.igeek.dao;

 

import java.sql.SQLException;

import java.util.List;

 

import org.apache.commons.dbutils.QueryRunner;

import org.apache.commons.dbutils.handlers.BeanListHandler;

import org.apache.commons.dbutils.handlers.ScalarHandler;

 

import com.igeek.pojo.User;

import com.igeek.util.JDBCUtils;

 

 

public class UserDAO {

   

    QueryRunner qr = new QueryRunner(JDBCUtils.getDateSource());

   

    /**

     * 分页查询

     * @param size 每页大小

     * @param page 当前页码

     * @return

     */

    public List<User> queryByPage(int size,int page){

       String sql = "select * from user limit ?,?";

       try {

           return qr.query(sql,new BeanListHandler<User>(User.class), (page-1)*size,size);

       } catch (SQLException e) {

           e.printStackTrace();

       }

       return null;

    }

   

    public int queryCount() {

       try {

           return new Integer(qr.query("select count(*) from user", new ScalarHandler()).toString());

       } catch (NumberFormatException e) {

           e.printStackTrace();

       } catch (SQLException e) {

           e.printStackTrace();

       }

       return 0;

    }

}

 

Service层:

package com.igeek.service;

 

import java.util.List;

 

import com.igeek.dao.UserDAO;

import com.igeek.pojo.User;

 

 

public class UserService {

   

    private UserDAO userDAO = new UserDAO();

    /**

     * 分页查询

     * @param size 每页大小

     * @param page 当前页码

     * @return

     */

    public List<User> queryByPage(int size,int page){

       return userDAO.queryByPage(size, page);

    }

   

    public int queryCount() {

       return userDAO.queryCount();

    }

}

 

1.4servlet实现

package com.igeek.servlet;

 

import java.io.IOException;

import java.util.List;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import com.igeek.pojo.User;

import com.igeek.service.UserService;

 

/**

 * Servlet implementation class UserServlet

 */

public class UserServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

 

    protected void doGet(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

       // 将查询的数据添加到request的作用域,转发到index.jsp

       int size = 10;

       int page = 1;// 默认第一页

       // 获取请求中的页码

       try {

           page = Integer.parseInt(request.getParameter("page"));

       } catch (NumberFormatException e) {

       }

       // 创建service对象

       UserService service = new UserService();

       // 计算最大页面

       int total = service.queryCount();

       //最大页码

       int maxPageNum = (int)Math.ceil(total*1.0/size);

       //将最大页面也放入request

       request.setAttribute("maxPageNum", maxPageNum);

       List<User> users = service.queryByPage(size, page);

       request.setAttribute("users", users);

       // 将页码也放入request

       request.setAttribute("page", page);

       request.getRequestDispatcher("userList.jsp").forward(request, response);

    }

 

    protected void doPost(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

       doGet(request, response);

    }

}

 

 

修改页面:添加分页的部分:

1.5分页显示数据的总结

①任何分页查询都需要查询数据,同时查询总条数。因为页面需要知道最大页码是多少,需要计算。

②分页显示数据,页面的上一页,下一页等等连接,请求的还是当前页面的url。

③从servlet到jsp需要将数据列表(users),当前的页码,最大页面,总条数等等相关的需要在页面使用的数据设置到request的作用域中。

④页面的连接请求servlet时需要传入对应的页码和其他需要的参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值