MyBatis-Plus 提供了多租户插件,用于在多租户系统中简化数据隔离的处理。多租户系统是一种允许多个租户(通常是不同的客户或组织)共享同一个系统实例的架构,每个租户的数据应该被隔离,不会相互影响。

以下是使用 MyBatis-Plus 多租户插件的基本配置和使用方法:

1. 添加 Maven 依赖: 在项目的 pom.xml 文件中添加 MyBatis-Plus 依赖。
   <!-- Maven 依赖 -->
   <dependency>
       <groupId>com.baomidou</groupId>
       <artifactId>mybatis-plus-boot-starter</artifactId>
       <version>最新版本</version>
   </dependency>

2. 配置多租户插件: 在 Spring Boot 项目的 application.yml 或 application.properties 中配置多租户插件。
   # 多租户插件配置
   mybatis-plus:
     configuration:
       # 其他配置
       multi-tenant-type: SCHEMA
       multi-tenant-column: tenant_id

   上述配置中,multi-tenant-type: SCHEMA 表示使用数据库 schema 的方式进行租户隔离,multi-tenant-column: tenant_id 表示使用名为 "tenant_id" 的字段作为租户标识。你需要在实体类中添加一个名为 "tenant_id" 的字段,并配置 @TableField 注解。
   // 示例:多租户字段配置
   @TableField(value = "tenant_id", fill = FieldFill.INSERT)
   private String tenantId;

3. 动态租户解析器: 配置一个动态租户解析器,用于动态获取当前租户标识。
   @Bean
   public MybatisPlusInterceptor mybatisPlusInterceptor() {
       MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
       interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
           @Override
           public Expression getTenantId() {
               // 在这里根据实际情况获取当前租户标识
               return new LongValue(1L); // 示例中写死租户标识为1
           }

           @Override
           public String getTenantIdColumn() {
               return "tenant_id";
           }

           @Override
           public boolean ignoreTable(String tableName) {
               // 可以配置忽略处理的表
               return false;
           }
       }));
       return interceptor;
   }

   上述示例中,getTenantId 方法需要根据实际情况返回当前租户的标识,这里为了示例写死为 1。

4. 在 SQL 语句中使用租户字段: 在进行查询和更新操作时,MyBatis-Plus 会自动根据租户标识生成对应的 SQL 语句。
   // 示例:查询
   List<User> userList = userMapper.selectList(Wrappers.<User>lambdaQuery()
           .eq(User::getAge, 25));

   // 示例:更新
   User user = new User();
   user.setAge(26);
   userMapper.update(user, Wrappers.<User>lambdaUpdate()
           .eq(User::getId, 1));

在上述示例中,通过 User::getAge 方法和 User::getId 方法,MyBatis-Plus 会自动根据租户标识生成包含租户字段的 SQL 语句。

多租户插件可以帮助你在多租户系统中实现数据隔离,简化了在 SQL 语句中添加租户字段的操作。请根据实际情况灵活配置租户字段和租户解析器。


转载请注明出处:http://www.zyzy.cn/article/detail/7072/MyBatis