实现逻辑
第一次访问该页面,请求没有任何参数,系统默认展示的是所有数据;
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}页
每页${requestScope.pageSize}条
共${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>