首页 > 其他分享 >SpinrgBoot + MybatisPlus 多租户整合

SpinrgBoot + MybatisPlus 多租户整合

时间:2023-01-29 15:58:34浏览次数:53  
标签:插件 MybatisPlus 租户 SpinrgBoot new import interceptor com

 关于SpringBoot  整合 mybatisPlus 多租户的一点小实践。

https://github.com/doudou20188/mybatisPlus_TenantIdManager 简易项目,自行拉取参考。

上代码,蛮简单的,其实就是多配置一个拦截器,设置租户ID,这个操作可以取系统当前登陆信息,获取当前用户属于的租户。

 1 package com.example.book_crud.config;
 2 
 3 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
 4 import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
 5 import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
 6 import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
 7 import com.example.book_crud.config.talent.TenantIdManager;
 8 import net.sf.jsqlparser.expression.Expression;
 9 import net.sf.jsqlparser.expression.LongValue;
10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.context.annotation.Bean;
12 import org.springframework.context.annotation.Configuration;
13 
14 @Configuration
15 public class MybatisPlusConfig{
16 
17     /* 租户ID管理器 */
18     @Autowired
19     private TenantIdManager tenantIdManager;
20 
21 
22     @Bean
23     public MybatisPlusInterceptor mybatisPlusInterceptor(){
24         //定义mapper拦截器
25         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
26         //多租户插件
27         TenantLineInnerInterceptor tenantInterceptor = new TenantLineInnerInterceptor();
28         tenantInterceptor.setTenantLineHandler(new TenantLineHandler() {
29             @Override
30             public Expression getTenantId() {
31                 // 返回当前用户的租户ID
32                 return new LongValue(tenantIdManager.getCurrentTenantId());
33             }
34         });
35 
36 
37         //根据需求,添加需要的MP拦截器
38         //1分页插件
39 //        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
40         //乐观锁插件
41 //        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); // 乐观锁插件
42 
43         //2.多租户ID插件
44         interceptor.addInnerInterceptor(tenantInterceptor);
45         return interceptor;
46     }
47 }

我们尝试一下,查询的拦截,随便设置一下租户的ID:233

    @GetMapping
    public Result queryAll(){
        tenantIdManager.setCurrentTenantId(233L);
        return new Result(true,bookService.list());
    }

拦截处理结果

==>  Preparing: SELECT id, type, name, description FROM tbl_book WHERE tenant_id = 233

可以看到,这里多帮助我们拼接了一个条件 

tenant_id = 233, 当前我们的表tbl_book 也需要额外加上该字段。实际使用过程中,需要根据业务情景使用,去判断是否需要进行租户的拦截处理。其实蛮简单的,类似乐观锁的操作。
需要注意的是,我们这里做的事同数据库的处理,是非物理隔离的。数据的隔离等级较低。
PS:才发现自己断更了好久,没沉淀了,如今重拾起来。加油。

标签:插件,MybatisPlus,租户,SpinrgBoot,new,import,interceptor,com
From: https://www.cnblogs.com/doudou2018/p/17072875.html

相关文章

  • Mongodb多租户功能实现
    importcom.mongodb.client.MongoClient;importcom.mongodb.client.MongoDatabase;importlombok.extern.slf4j.Slf4j;importorg.springframework.data.mongodb.core......
  • SAAS化架构多租户数据如何存储
    昨天沟通一个SAAS化架构多租户数据如何存储,这个问题讨论的很激烈,最后经过多位大牛的经验,总结出3种方式,采用哪种情况还是根据场景评估下:1、分库分表、表名带租户号,开发的时......
  • MybatisPlus公共字段自动填充
    MybatisPlus公共字段自动填充插入或更新的时候,为指定的字段赋予指定的值,使用的好处就是可以统一对这些字段进行处理,避免重复代码步骤实体类属性加入@TableFiled,指......
  • MybatisPlus分页插件
    MybatisPlus分页插件@ConfigurationpublicclassMybatisPlusConfig{@BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisP......
  • 【问题记录】【Mybatis-Plus】saveBatch MybatisPlusException: Error: Cannot execut
    1 问题描述MyBatis-Plus版本<mybatis-plus-boot-starter.version>3.3.0</mybatis-plus-boot-starter.version>由于Mybatis-Plus本身已经有增删改查以及批量保存的基本......
  • MybatisPlus多数据源
    适用于多种场景:纯粹多库、读写分离、一主多从、混合模式等。场景说明:我们创建两个库,分别为:​​mybatis_plus​​​(以前的库不动)与​​mybatis_plus_1​​​(新建),将mybatis......
  • MybatisPlus常用插件
    分页插件MyBati-Plus自带分页插件,只要简单的配置即可实现分页功能。添加配置类​​MyBatisPlusConfig​​。packagecom.dawn.mybatisplus.config;importcom.baomidou.m......
  • MybatisPlus通用枚举
    表中的有些字段值是固定的,例如性别(男或女),此时我们可以使用MyBatis-Plus的通用枚举来实现。添加字段在数据库表添加字段​​sex​​altertablet_usermodifysexintnull......
  • MybatisPlus条件构造器
    Wrapper介绍​​Wrapper​​:条件构造抽象类,最顶端父类​​AbstractWrapper​​:用于查询条件封装,生成sql的where条件​​QueryWrapper​​:查询条件封装​​UpdateW......
  • MybatisPlus常用注解
    @TableName经过以上的测试,在使用MyBatis-Plus实现基本的CRUD时,我们并没有指定要操作的表,只是在Mapper接口继承BaseMapper时,设置了泛型User,而操作的表为user表,由此得出......