1、依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
2、请求和返回封装
@Data
@ApiModel(value = "公共分页对象", description = "公共分页请求对象")
public class PageRequest<T> implements Serializable {
@ApiModelProperty(value = "当前页", example = "1", required = true)
@JsonProperty("page_num")
private Integer pageNum;
@ApiModelProperty(value = "一页多少条", example = "100", allowableValues = "10,20,30,40,50,100,500,1000", required = true)
@JsonProperty("page_size")
private Integer pageSize;
@ApiModelProperty(value = "排序字段")
@JsonProperty("order_by")
private String orderBy;
@ApiModelProperty(value = "排序类型,DESC、ASC", allowableValues = "DESC,ASC")
@JsonProperty("order_by_type")
private String orderByType;
@ApiModelProperty(value = "分页查询请求参数")
private T param;
public int getPageNum() {
if (this.pageNum == null || this.pageNum < 1) {
return 1;
}
return this.pageNum;
}
public int getPageSize() {
if (this.pageSize == null || this.pageSize < 1) {
return 100;
}
return this.pageSize;
}
}
@Data
@ApiModel(value = "公共分页响应对象", description = "公共分页响应对象")
public class PageResult<T> implements Serializable {
@ApiModelProperty("总记录数")
@JsonProperty("total_record")
private Long totalRecord;
@ApiModelProperty("当前分页总页数")
@JsonProperty("total_page")
private Long totalPage;
@ApiModelProperty("分页记录列表")
@JsonProperty("current_data")
private List<T> currentData;
}
3、config
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
@Configuration
@MapperScan("com.mapper")
public class MybatisPlusPageConfig {
/**
* 新版分页插件
*
* @return
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return mybatisPlusInterceptor;
}
@Bean
public MyInjector myInjector(){
return new MyInjector();
}
}
4、myInject.java
import java.util.List;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
public class MyInjector extends DefaultSqlInjector {
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
// 注意:此SQL注入器继承了DefaultSqlInjector(默认注入器),调用了DefaultSqlInjector的getMethodList方法,保留了mybatis-plus的自带方法
List<AbstractMethod> methodList = super.getMethodList(mapperClass);
methodList.add(new InsertBatchMethod());
methodList.add(new UpdateBatchMethod());
return methodList;
}
}
5、实例
controller.java
@PostMapping("page_list")
public PageResult<Vo> pageList(@RequestBody PageRequest<Req> request) {
return sevice.pageList(request);
}
service.java
PageResult<Vo> pageList(PageRequest<Req> request);
serviceImpl.java
@Override
public PageResult<Vo> pageList(PageRequest<Req> request) {
IPage<Vo> page = new Page<>(request.getPageNum(), request.getPageSize());
IPage<Vo> pageRecord = Mapper.list(page,request.getParam().getParam1(), request.getParam().getParam2());
PageResult<Vo> pageResult = new PageResult<>();
pageResult.setTotalRecord(pageRecord.getTotal());
pageResult.setTotalPage(pageRecord.getPages());
pageResult.setCurrentData(pageRecord.getRecords());
return pageResult;
}