本文只针对Mybatis Plus的分页处理进行阐述,其他的基本操作可以参考 Mybatis Plus官方文档

MybatisPlusConfig

在使用 Mybatis Plus 做分页时,需要在 Spring Boot 中专门配置一个类。

@Configuration
public class MybatisPlusConfig {
	/**
	 * 新的分页插件: 一缓和二缓遵循Mybatis规则
	 * https://baomidou.com/pages/2976a3/#spring
	 */
	@Bean
	public MybatisPlusInterceptor mybatisPlusInterceptor() {
		MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
		interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
		return interceptor;
	}
}

IPage接口

Mybatis Plus 提供了一个 IPage 分页接口,通过查询返回 IPage 后,可以调用其下的方法,获取例如分页条数、所有记录、所有页数等数据。
image.png

PageVO

为了规范分页的数据返回,可以通过定义 PageVO 来完成,该 View Object 和之前提到的 SuccessVO 基本类似。

在其构造函数中传入 IPage 用以将返回的 data 结构丰富化。

@Getter
@Setter
public class PageVO<T> {
	private Integer code;
	private String msg;
	private PageData<T> data;

	public PageVO(IPage<T> iPage) {
		ResultCode resultCode = ResultCode.SUCCESS;
		this.code = resultCode.getCode();
		this.msg = resultCode.getMsg();
		this.data = new PageData<>(iPage);
		ResponseUtil.setResponseHttpStatus(resultCode.getStatusCode());
	}

	@Getter
	@Setter
	public static class PageData<T> {
		private List<T> items;
		private Long currentPage;
		private Long nextPage;
		private Long prevPage;
		private Long totalCount;
		private Long totalPage;

		public PageData(IPage<T> iPage) {
			long totalPage = iPage.getPages();
			long currentPage = iPage.getCurrent();

			this.items = iPage.getRecords();
			this.totalCount = iPage.getTotal();
			this.totalPage = totalPage;
			this.currentPage = currentPage;
			this.nextPage = currentPage <= totalPage - 1 ? currentPage + 1 : null;
			this.prevPage = currentPage > 1 ? currentPage - 1 : null;
		}
	}
}

分页视图层使用

在使用 PageVO 时变得十分方便,只需要直接传入当前查询返回的 IPage 即可。

@GetMapping("")
public PageVO<User> getUsers(@Validated PageDTO pageDTO) {
	QueryWrapper<User> queryWrapper = new QueryWrapper<>();
	queryWrapper.lambda().orderByDesc(User::getCreateTime);
	Page<User> page = new Page<>(pageDTO.getPage(), pageDTO.getSize());
	IPage<User> iPage = this.userService.getBaseMapper().selectPage(page, queryWrapper);
	return new PageVO<>(iPage);
}

标题:Spring Boot构建Web API Wheel(四)—— MyBatis Plus分页处理
作者:Jeffrey