JSP之实现分页查询

实现逻辑

第一次访问该页面,请求没有任何参数,系统默认展示的是所有数据;
Servlet请查询到的数据、当前页数、页条数、总数作为参数请求转发到JSP;

上一页

其他参数基本不变,回传页数=当前页数-1,后台进行计算,当页数或也条数小于等于0时,默认为1;

下一页

其他参数基本不变,回传页数=当前页数+1,后台进行计算,当页数大于最大页数时,默认为最大页数;

首页

其他参数基本不变,回传页数=1;

尾页

其他参数基本不变,回传页数=(总条数/页条数);

源码

Dao层:

public interface UserMapper{
    @Select("<script>" +
            "select * from user" +
            "<where>" +
            "<if test=\"user.account!='' and user.account!=null\">" +
            "account=#{user.account}" +
            "</if>" +
            "</where>" +
            "<if test=\"start!=null and end!=null\">" +
            "limit #{start},#{end}" +
            "</if>" +
            "</script>")
    public List<User> findAll(@Param("user") User user,@Param("start") Integer start,@Param("end") Integer end);

Service层

public class UserService {
    private  static  UserMapper mapper;
    private  static  SqlSession session;
    static {
        try {
            //使用MyBatis提供的Resources类加载mybatis的配置文件
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            //构建sqlSession的工厂
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
            //通过SqlSessionFactory对象获取SqlSession对象。
            session= sessionFactory.openSession();
            mapper=session.getMapper(UserMapper.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public List<User> findAll(User user,Integer start,Integer end){
        List<User> users = mapper.findAll(user,start,end);
        session.commit();
        return users;
    }
}

WEB层

@WebServlet("/findUser.do")
public class findUserServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
        doPost(request,response);
    }
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
       //获取请求的参数
        String account = request.getParameter("account");
        String page_str = request.getParameter("page");
        String page_Size = request.getParameter("pageSize");
        System.out.println(page_str);

        UserService userService = new UserService();
        User user = new User();
        List<User> users = null;
        //默认页数
        Integer page = 1;
        //默认条数
        Integer pageSize = 10;
        
        //总条数
        Integer total = userService.findAll(user,null,null).size();
//当页面数或者页面条数为空时,使用默认值,默认读取第一页前10条数据        if(page_str==null||page_Size==null|){
            users = userService.findAll(user,page-1,pageSize);
        }else{
            page = Integer.valueOf(page_str);
            pageSize = Integer.valueOf(page_Size);
            //获取开始条数
            Integer start = page;
            //获取截止条数
            Integer end =  pageSize;
            //获取最大页数
            Integer maxpage = total/pageSize;
            if(page>0&&pageSize>0){
            	start = (page-1)*pageSize;
            	end = start+pageSize;
            }
            if(page>maxpage){
            	start = maxpage*pageSize;
            	end = start+pageSize;
            }
            users = userService.findAll(user,start,end);

        }
        
        request.setAttribute("users",users);
        request.setAttribute("page",page);
        request.setAttribute("pageSize",pageSize);
        request.setAttribute("total",total);
        request.getRequestDispatcher("/view/user/user.jsp").forward(request,response);
    }
    
}

user.jsp

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %><%--
  Created by IntelliJ IDEA.
  User: ss
  Date: 2021/1/7
  Time: 21:34
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false" %>
<html>
<head>
    <style>
        table{
            font-family: verdana,arial,sans-serif;font-size:11px;color:#333333;border-width: 1px;border-color: #666666;border-collapse: collapse;
        }
        th{
            border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #dedede;
        }
        td{
            border-width: 1px;padding: 8px;border-style: solid;border-color: #666666;background-color: #ffffff;
        }
    </style>

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

<div align="center">
<table>
    <tr><th>ID</th><th>用户名</th><th>密码</th></tr>
<c:forEach items="${requestScope.users}" var="user">
    <tr><td>${user.user_id}</td><td>${user.account}</td><td>${user.password}</td></tr>
</c:forEach>
</table>
</div>
<div align="right">
    <a href="/findUser.do?page=1&pageSize=${requestScope.pageSize}">首页</a>
    <a href="/findUser.do?page=${requestScope.page-1}&pageSize=${requestScope.pageSize}">上一页</a>
    当前为${requestScope.page}页&nbsp;
    每页${requestScope.pageSize}条&nbsp;
    共${requestScope.total}条
    <a href="/findUser.do?page=${requestScope.page+1}&pageSize=${requestScope.pageSize}">下一页</a>
    <a href="/findUser.do?page=<fmt:formatNumber type="number" value="${requestScope.total/requestScope.pageSize}" maxFractionDigits="0"/>&pageSize=${requestScope.pageSize}">最后一页</a>
</div>
</form>
</body>
</html>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值