Mybatis04-分页


前言

使用了Mybatis的分页插件


一、准备工作

	1.导依赖
	2.在mybatis主配置文件配置插件
	3.使用

1.导依赖

<dependency>
	<groupId>com.github.pagehelper</groupId>
	<artifactId>pagehelper</artifactId>
	<version>5.1.11</version>
</dependency>

2.在mybatis主配置文件配置插件

<!--注意和其他标签的先后顺序-->
<plugins>
	<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

3.使用

//这个分页插件会对所有的查询进行拦截然后拼接(如mysql拼接 LIMIT)
//第一个参:页数 		第二个参:一页显示多少条
PageHelper.startPage(1,5);

4.实例

	//分页查询所有
	private Integer page=1;
	@GetMapping("/student")
	public ModelAndView select(Integer page) throws IOException {
		ModelAndView mv=new ModelAndView();
		InputStream in=Resources.getResourceAsStream("mybatis.xml");
		SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(in);
		SqlSession session=sessionFactory.openSession();
		MapperHelper mh=new MapperHelper();
		mh.processConfiguration(session.getConfiguration());
		//--------------------------------------------------
		//--------------------------------------------------
		//如果页面没有传值就使用默认值,防止为给全局变量赋值为null
		if(page!=null) {
			this.page=page;
		}
		StudentMapper studentMapper=session.getMapper(StudentMapper.class);
		//分页
		PageHelper.startPage(this.page,5);
		List<Student> list=studentMapper.selectAll();
		//将查询的数据封装成PageInfo对象可以更加方便前端分页
		PageInfo<Student> pi=new PageInfo<Student>(list);
		mv.addObject("pi",pi);
		System.out.println(pi);
		mv.setViewName("/index.jsp");
		session.close();
		return mv;
	}

前端

<%@ page language="java" isELIgnored="false" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<table width="80%" border="1">
		<tr>
			<th>编号</th>
			<th>姓名</th>
			<th>性别</th>
			<th>外键</th>
		</tr>
		<!--pi.getList从封装的对象中拿,封装前集合的查询数据-->
		<c:forEach items="${pi.getList()}" var="s">
		<tr align="center">
			<td>${s.sid }</td>
			<td>${s.sname }</td>
			<td>${s.sex }</td>
			<td>${s.eid }</td>			
		</tr>
		</c:forEach>
	</table>
	当前页数${pi.pageNum }/${pi.pages }<br/>
	<a href="javascript:tj(1)">第一页</a>
	<c:if test="${pi.hasPreviousPage==true }">
		<a href="javascript:tj(${pi.prePage })">上一页</a>
	</c:if>
	<c:if test="${pi.hasPreviousPage==false }">
		上一页
	</c:if>
	<c:forEach  items="${pi.navigatepageNums}" var="s">
		<a href="javascript:tj(${s })">${s}</a>
	</c:forEach>
	<c:if test="${pi.hasNextPage==true }">
		<a href="javascript:tj(${pi.nextPage })">下一页</a>
	</c:if>
	<c:if test="${pi.hasNextPage==false }">
		下一页
	</c:if>
	<a href="javascript:tj(${pi.pages })">最后一页</a>

PageInfo属性

pages:数总页数
pageNum:当前页
hasPreviousPage:是否有上一页
hasNextPage:是否有下一页
navigatepageNums:导航编码数
navigatePages:导航条数(8条)
prePage:上一页页数
nextPage:下一页页数
total:总条数
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一个优秀的持久层框架,而MyBatis-Plus是在MyBatis基础上进行了扩展和增强的框架。它们都提供了分页功能来方便处理大量数据的查询操作。 在MyBatis中实现分页可以通过使用插件或者自定义SQL语句来实现,而MyBatis-Plus分页,你可以按照以下步骤进行操作: 1. 在你的实体类中添加分页参数,例如`current`表示当前页码,`size`表示每页显示的记录数。 2. 在你的Mapper接口中继承`BaseMapper`接口,该接口提供了一些常用的CRUD方法,包括分页查询方法。 3. 在你的Service层中调用分页查询方法,传入分页参数和查询条件。 4. 在Controller层中接收分页结果,并返回给前端展示。 下面是一个示例代码: ```java // 实体类 public class User { private Long id; private String name; // 省略getter和setter方法 } // Mapper接口 public interface UserMapper extends BaseMapper<User> { // 省略其他方法 } // Service层 @Service public class UserService { @Autowired private UserMapper userMapper; public IPage<User> getUserList(int current, int size) { Page<User> page = new Page<>(current, size); QueryWrapper<User> queryWrapper = new QueryWrapper<>(); // 设置查询条件 // queryWrapper.eq("name", "张三"); return userMapper.selectPage(page, queryWrapper); } } // Controller层 @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/users") public IPage<User> getUserList(@RequestParam(defaultValue = "1") int current, @RequestParam(defaultValue = "10") int size) { return userService.getUserList(current, size); } } ``` 以上示例中,`getUserList`方法实现了分页查询功能,通过调用`selectPage`方法实现分页查询,并将查询结果封装到`IPage`对象中返回给前端。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值