一、分页插件

多个插件的情况下分页插件需要放到最后执行

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 {@Beanpublic 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 {@Resourceprivate AirlinesInfoService airlinesInfoService;@Testvoid 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 {@Beanpublic 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() {@Overridepublic Expression getTenantId() {// 获取租户 ID 值表达式,只支持单个 ID 值return new LongValue(1111);}@Overridepublic String getTenantIdColumn() {// 获取租户字段名,默认字段名叫: tenant_idreturn TenantLineHandler.super.getTenantIdColumn();}@Overridepublic boolean ignoreTable(String tableName) {// 根据表名判断是否忽略拼接多租户条件(不虚要拼接多租户条件的表名称)return Objects.equals(tableName, "t_config");}@Overridepublic 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 {@Resourceprivate AirlinesInfoService airlinesInfoService;@Resourceprivate TConfigService tConfigService;/*** 测试多租户配置是否生效*/@Testvoid test() {Page<AirlinesInfo> page = new Page<>(1, 5);Page<AirlinesInfo> pageList = airlinesInfoService.page(page);List<AirlinesInfo> list = pageList.getRecords();list.forEach(System.out::println);}/*** 测试配置了不进行多租户控制的条件是否生效*/@Testvoid notTenantTest() {Page<TConfig> page = new Page<>(1, 5);Page<TConfig> pageList = tConfigService.page(page);List<TConfig> list = pageList.getRecords();list.forEach(System.out::println);}/*** 测试不添加租户字段值的时候,会不会自动封装租户属性*/@Testvoid ignoreInsertTest() {AirlinesInfo airlinesInfo = new AirlinesInfo();airlinesInfo.setAddress("合肥");
//        airlinesInfo.setTenantId(2);airlinesInfoService.save(airlinesInfo);}
}

2.4、测试用例执行结果



三、其他插件

这里只列举了2个常用插件,其他官方插件可以看官方文档