看完mybatis-plus多租户方案的想法

首先针对于租户是为了满足不同用户在同一系统上对资源的访问情况,首先所有非租户的表正常建立(就是比如user表就正常建立),其次所有租户的表需要额外增加tenant_id字段来表明租户id,同时也可以新增租户表。
我第一次学习mybatis-plus的方式去实现租户,理解过后发现本质上其实可以自己手写mybatis插件进行sql拦截,再添加租户字段判断。
方案整体流程:
第一:mybatis-plus首先需要注册一个拦截器(这个拦截器是全局拦截器,拦截所有请求,设置规则部分放行),去拦截整个需要租户控制的接口,现在是除登录接口外的接口
第二,注册mybatis-plus远吗手写的一个mybatis拦截器插件,将其注册成bean,设置插件的租户处理器为自定义的租户处理器(自定义租户处理器可以设置租户返回内容以及过滤非租户资源表)
第三,编写第一步的拦截器逻辑,如果是目标接口就拦截处理,然后通过注入获取第二步注册的分页插件bean(这个插件mybatis-plus就是用来做分页插件拦截sql添加分页条件的)来获取自定义的租户处理器,通过登录接口添加的<token,租户id>map 来获取当前登录用户租户id,然后将自定义租户处理器的id修改成目标租户id。
第四,自定义的PaginationInterceptor插件会根据租户处理器过滤的规则,拼接租户资源表的条件到sql上再执行返回。
例如:原sql:select * from profile left join users on profile.id = users.user_id
分页插件拼接过后:SELECT * FROM profile LEFT JOIN users ON users.tenant_id = 1 AND profile.id = users.user_id WHERE profile.tenant_id = 1
就是截取sql加了一些条件
总结:其实本质上租户的实现第一在于表的过滤;第二就是通过全局拦截器修改当前token下租户id到mybatis-plus手写的插件中;
第三就是mybatis插件拦截sql过后通过修改sql来改变执行sql并返回结果。
想法:其实可以自定义mybatis拦截器,然后手写一些规则拦截需要租户id条件的sql,同样也是通过token获取当前用户租户id,然后将租户id拼接到sql上面执行即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值