插件功能
| 拦截器 | 描述 |
|---|---|
| TenantLineInnerInterceptor | 多租户插件 |
| DynamicTableNameInnerInterceptor | 动态表名插件 |
| PaginationINnerIntercepor | 分页插件 |
| OptimisticLockerInnerInterceptor | 乐观锁插件 |
| IllegalSQLInnerInterceptor | SQL性能规范插件,检测并拦截垃圾SQL |
| BlockAttackInnerInterceptor | 防止全表更新和删除的插件 |
分页
创建MyBatis插件配置类
与controller同级下创建config包,其中创建MyBatisConfig类
@Configuration // 标识一个类是 Spring IoC 容器中的 Java 配置类。这意味着这个类可以包含用于定义 Bean 的方法,并且这些 Bean 会被 Spring 容器管理。
public class MyBatisConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 1.创建分页插件
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
paginationInnerInterceptor.setMaxLimit(1000L); // 设置上限
// 2.添加分页插件
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
}
Service层
测试代码
@Test
void testPageQuery() {
int pageNo = 1, pageSize = 2;
// 1.准备分页条件
// 1.1分页条件
Page<User> page = Page.of(pageNo, pageSize);
// 1.2排序条件
page.addOrder(new OrderItem("balance", true));
page.addOrder(new OrderItem("id", true));
// 2.分页查询
Page<User> p = userService.page(page);
// 3.解析
long total = p.getTotal();
System.out.println("total = " + total);
long pages = p.getPages();
System.out.println("pages = " + pages);
List<User> users = p.getRecords();
users.forEach(System.out::println);
}
通用分页实体
创建分页查询类PageQuery
@Data
@ApiModel(description = "分页查询实体")
public class PageQuery {
@ApiModelProperty("页码")
private Integer pageNo;
@ApiModelProperty("页内数据数量")
private Integer pageSize;
@ApiModelProperty("排序字段")
private String sortBy;
@ApiModelProperty("是否升序")
private Boolean isAsc;
}
要分页的查询类继承PageQuery
@EqualsAndHashCode(callSuper = true) // 用于在子类中自动生成 equals() 和 hashCode() 方法,同时也考虑了父类的字段
@Data
@ApiModel(description = "用户查询条件实体")
public class UserQuery extends PageQuery{
………………
}
创建统一的分页结果-DTO类-PageDTO
@Data
@ApiModel(description = "分页结果")
public class PageDTO<T> {
@ApiModelProperty("总条数")
private long total;
@ApiModelProperty("总页数")
private long pages;
@ApiModelProperty("集合")
private List<T> list;
}