版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
源代码:GitHub链接
环境:
- Eclipse项目
- web 3.0
- Tomcat 8.5
用到的技术:
- MyBatis
- Log4J
- JSTL
- 基本的…Java Servlet,JSP,…
使用方式:
- 直接运行
ShowServlet.java
(选择Run on server),即可在网页中看到分页效果,如下
项目结构
主要源代码(全部源码在github链接)
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
<c:forEach items="${PageInfo.dataList }" var="pi">
<tr>
<td>${pi.id }</td>
<td>${pi.name }</td>
<td>${pi.age }</td>
</tr>
</c:forEach>
</table>
<a href="ShowServlet?pageNum=${PageInfo.pageNum-1 }&pageSize=${PageInfo.pageSize}" <c:if test="${PageInfo.pageNum<=1 }"> οnclick="javascript:return false;" </c:if> >上一页</a>
<a href="ShowServlet?pageNum=${PageInfo.pageNum+1 }&pageSize=${PageInfo.pageSize}" <c:if test="${PageInfo.pageNum>=PageInfo.total }"> οnclick="javascript:return false;" </c:if> >下一页</a>
</body>
</html>
ShowServlet.java
package cn.hanquan.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.hanquan.pojo.PageInfo;
import cn.hanquan.service.PeopleService;
import cn.hanquan.service.impl.PeopleServiceImpl;
/**
* 分页显示People信息
*
* @author Buuug
*
*/
@WebServlet("/ShowServlet")
public class ShowServlet extends HttpServlet {
private PeopleService peopleService = new PeopleServiceImpl();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 第一次访问的验证,如果没有传递参数,设置默认值
String pageSizeStr = req.getParameter("pageSize");
int pageSize = 2;
if (pageSizeStr != null && !pageSizeStr.equals("")) {
pageSize = Integer.parseInt(pageSizeStr);
}
String pageNumberStr = req.getParameter("pageNum");
int pageNum = 1;
if (pageNumberStr != null && !pageNumberStr.equals("")) {
pageNum = Integer.parseInt(pageNumberStr);
}
PageInfo pi = peopleService.showPage(pageSize, pageNum);
System.out.println(pi.getDataList());
req.setAttribute("PageInfo", pi);
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
}
PeopleServiceImpl.java
package cn.hanquan.service.impl;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import cn.hanquan.pojo.PageInfo;
import cn.hanquan.pojo.People;
import cn.hanquan.service.PeopleService;
/**
* 在数据访问层、控制器中处理异常,在service中只抛出异常
*
* @author Buuug
*
*/
public class PeopleServiceImpl implements PeopleService {
Logger logger = Logger.getLogger(PeopleServiceImpl.class);
@Override
public PageInfo showPage(int pageSize, int pageNum) throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
PageInfo pi = new PageInfo();
pi.setPageNum(pageNum);
pi.setPageSize(pageSize);
// 查询结果
Map<String, Object> map = new HashMap<>();
map.put("pageStart", pageSize * (pageNum - 1));
map.put("pageSize", pageSize);
List<People> list = session.selectList("cn.hanquan.mapper.PeopleMapper.selByPage", map);
pi.setDataList(list);
logger.debug(list);
// 总页数
int count = session.selectOne("cn.hanquan.mapper.PeopleMapper.selCount");
pi.setTotal((count % pageSize == 0 ? count / pageSize : count / pageSize + 1));
logger.debug("总人数:"+pi.getTotal());
return pi;
}
}
mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!-- 给类起别名 -->
<typeAliases>
<package name="cn.hanquan.pojo"/>
</typeAliases>
<environments default="default">
<environment id="default">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/people?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="cn/hanquan/mapper/PeopleMapper.xml"/>
</mappers>
</configuration>
PeopleMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 填写实例化的包名+类名,在java代码中调用语句的时候使用 -->
<mapper namespace="cn.hanquan.mapper.PeopleMapper">
<!-- limit分页查询 -->
<select id="selByPage" resultType="People" parameterType="map">
select * from people limit #{pageStart}, #{pageSize}
</select>
<!-- 查询总数 -->
<select id="selCount" resultType="int">
select count(*) from people
</select>
</mapper>