【MyBatis】Mybatis实现分页效果

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/sinat_42483341/article/details/100181662

源代码: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>

猜你喜欢

转载自blog.csdn.net/sinat_42483341/article/details/100181662