欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

【MyBatis】Mybatis实现分页效果

发布时间:2024/2/28 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【MyBatis】Mybatis实现分页效果 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

源代码: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();@Overrideprotected 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);@Overridepublic 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 configurationPUBLIC "-//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 mapperPUBLIC "-//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>

总结

以上是生活随笔为你收集整理的【MyBatis】Mybatis实现分页效果的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。