MyBatis Plus(MP)是一个 MyBatis 的扩展插件,它提供了很多便捷的功能,如自动分页、自动填充字段等。使用 MyBatis Plus 进行分页非常简便,只需几行代码即可完成。
以下是使用 MyBatis Plus 进行分页的具体步骤:
1. 添加依赖
首先,在你的项目中添加 MyBatis Plus 的依赖。如果你使用 Maven,可以在 pom.xml
文件中添加以下依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>
2. 配置 MyBatis Plus
通常情况下,如果你使用的是 Spring Boot,MyBatis Plus 会自动配置好大部分内容。你只需要确保 DataSource
和 SqlSessionFactory
已经正确配置。
3. 定义 Entity 和 Mapper
Entity 类
首先,定义一个实体类,例如 User
:
package com.example.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("users")
public class User {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String userName;
private String departmentId;
// 其他属性...
}
Mapper 接口
接下来,定义一个 Mapper 接口,继承 BaseMapper
:
package com.example.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
// 可以在这里定义其他自定义的查询方法
}
4. 使用分页查询
在 Service 层中,你可以使用 Page
对象来进行分页查询。以下是一个示例:
Service 接口
package com.example.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.entity.User;
public interface UserService extends IService<User> {
Page<User> getUserWithDepartmentAndOrders(int currentPage, int pageSize);
}
Service 实现
package com.example.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import com.example.service.UserService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import javax.annotation.Resource;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Resource
private UserMapper userMapper;
@Override
public IPage<User> getUserWithDepartmentAndOrders(int currentPage, int pageSize) {
// 创建分页对象
IPage<User> page = new Page<>(currentPage, pageSize);
// 执行分页查询
userMapper.selectPage(page, null); // null 表示没有额外的查询条件
return page;
}
}
5. 控制器层
在控制器层中调用 Service 层的方法,并返回分页信息:
package com.example.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/paged")
public IPage<User> getUsersPaged(@RequestParam int currentPage, @RequestParam int pageSize) {
return userService.getUserWithDepartmentAndOrders(currentPage, pageSize);
}
}
6. 测试分页
通过发送 HTTP 请求来测试分页功能:
GET /users/paged?currentPage=1&pageSize=10
7. 分页查询的参数
在 MyBatis Plus 中,IPage
是一个泛型接口,提供了分页查询所需的所有信息。你可以通过以下方法获取分页信息:
IPage.getTotal()
: 获取总记录数。IPage.getPages()
: 获取总页数。IPage.getCurrent()
: 当前页码。IPage.getSize()
: 每页记录数。IPage.getRecords()
: 获取当前页的数据列表。
示例输出
假设你发送了分页请求,返回的 JSON 数据可能如下所示:
{
"records": [
// 当前页的数据列表
],
"total": 98,
"pages": 10,
"current": 1,
"size": 10,
"hasNext": true,
"hasPrevious": false,
"isFirstPage": true,
"isLastPage": false,
"navigatePages": 8,
"navigatepageNums": [1, 2, 3, 4, 5, 6, 7, 8],
"prePage": 0,
"nextPage": 2
}