一、分页插件
多个插件的情况下分页插件需要放到最后执行
1.1、增加分页插件配置
package com.xx.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author aqi
* @date 2023/5/15 14:05
*/
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
return interceptor;
}
}
1.2、分页插件参数说明
官网配置说明地址
1.3、编写测试用例
package com.xx;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xx.domain.AirlinesInfo;
import com.xx.service.AirlinesInfoService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.List;
/**
* @author aqi
*/
@SpringBootTest
public class PaginationTest {
@Resource
private AirlinesInfoService airlinesInfoService;
@Test
void test() {
Page<AirlinesInfo> page = new Page<>(1, 5);
Page<AirlinesInfo> pageList = airlinesInfoService.page(page);
List<AirlinesInfo> list = pageList.getRecords();
list.forEach(System.out::println);
}
}
1.4、测试用例执行结果
1.5、Page对象说明
官方对象说明地址
二、多租户插件
2.1、作用
配置了多租户插件,可以实现:
1、数据插入时租户字段数据的自动插入
2、数据查询时自动添加租户字段的筛选条件
2.2、新增多租户插件配置
package com.xx.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import net.sf.jsqlparser.schema.Column;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.List;
import java.util.Objects;
/**
* @author aqi
* @date 2023/5/15 14:05
*/
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
// 初始化Mybatis Plus拦截器
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 添加多租户插件拦截器
interceptor.addInnerInterceptor(tenantLineInnerInterceptor());
// 添加分页插件拦截器
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
return interceptor;
}
/**
* 多租户插件
* @return TenantLineInnerInterceptor
*/
private TenantLineInnerInterceptor tenantLineInnerInterceptor() {
TenantLineHandler tenantLineHandler = new TenantLineHandler() {
@Override
public Expression getTenantId() {
// 获取租户 ID 值表达式,只支持单个 ID 值
return new LongValue(1111);
}
@Override
public String getTenantIdColumn() {
// 获取租户字段名,默认字段名叫: tenant_id
return TenantLineHandler.super.getTenantIdColumn();
}
@Override
public boolean ignoreTable(String tableName) {
// 根据表名判断是否忽略拼接多租户条件(不虚要拼接多租户条件的表名称)
return Objects.equals(tableName, "t_config");
}
@Override
public boolean ignoreInsert(List<Column> columns, String tenantIdColumn) {
// 忽略插入租户字段逻辑(如果插入数据事没有设置租户ID的值,那么这里会插入getTenantId方法返回的值)
return TenantLineHandler.super.ignoreInsert(columns, tenantIdColumn);
}
};
return new TenantLineInnerInterceptor(tenantLineHandler);
}
}
2.3、编写测试用例
package com.xx;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xx.domain.AirlinesInfo;
import com.xx.domain.TConfig;
import com.xx.service.AirlinesInfoService;
import com.xx.service.TConfigService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.List;
/**
* @author aqi
*/
@SpringBootTest
public class PaginationTest {
@Resource
private AirlinesInfoService airlinesInfoService;
@Resource
private TConfigService tConfigService;
/**
* 测试多租户配置是否生效
*/
@Test
void test() {
Page<AirlinesInfo> page = new Page<>(1, 5);
Page<AirlinesInfo> pageList = airlinesInfoService.page(page);
List<AirlinesInfo> list = pageList.getRecords();
list.forEach(System.out::println);
}
/**
* 测试配置了不进行多租户控制的条件是否生效
*/
@Test
void notTenantTest() {
Page<TConfig> page = new Page<>(1, 5);
Page<TConfig> pageList = tConfigService.page(page);
List<TConfig> list = pageList.getRecords();
list.forEach(System.out::println);
}
/**
* 测试不添加租户字段值的时候,会不会自动封装租户属性
*/
@Test
void ignoreInsertTest() {
AirlinesInfo airlinesInfo = new AirlinesInfo();
airlinesInfo.setAddress("合肥");
// airlinesInfo.setTenantId(2);
airlinesInfoService.save(airlinesInfo);
}
}
2.4、测试用例执行结果
三、其他插件
这里只列举了2个常用插件,其他官方插件可以看官方文档