手把手教你MyBatis-Plus高级功能-多租户的实现!

定义

多租户其本质是一种数据隔离的架构,通俗讲,既同一套系统,不同群体的用户进来之后,只能看到当前群体用户所授权的用户数据,而看不到其他群体用户的数据。举个例子,比如有一套课程培训系统开发给多家公司使用,A公司的员工进入系统只能看到A公司的相关课程,B公司员工进入系统,则只能看到B公司相关课程,而A公司的员工看不到B公司的课程,B公司看不到A公司的课程,这就是多租户。

多租户的方案

目前多租户的实现方案大概有这几种:

  1. 多租户之间新建独立数据库,自己使用自己的库,特点是隔离性最好,但成本巨大
  2. 多租户之间使用同一套数据库,使用不同的名称空间,特点是需要维护多多套名称空间的表,对数据库的性能要求较高
  3. 多租户之间使用同一套数据库,使用相同的名称空间,在各个表里设置租户字段,用来标识租户身份。特点是成本低,开发复杂度较高。

多租户搭建

这里我们采用第三种方式搭建。

数据库表准备

需要准备两个表,test表是不需要租户设置的,test_tenant是需要租户设置的,表结构如下:

image.png
image.png

自定义上下文

主要是用来从上下文设置和获取租户id的

image.png

多租户handler

主要是从自定义上下文中获取租户id,并且拦截执行的sql,加上租户id的添加参数


image.png
image.png

mybatis-plus打开多租户配置

主要是打开mybatis-plus打开多租户配置,注入自己的多租户handler


image.png

租户切面

主要是定义切面拦截,当客户端向服务端发起请求的时候,拦截请求,从请求头里获取租户id,添加到自定义上下文中


image.png

配置文件

这里主要是设置了一个配置参数,对不要设置租户id的表,可以在这里配置


image.png

测试

新增test表数据(该表不需要设置租户id)

image.png
image.png

新增test_tenant表数据(该表需要设置租户id)

image.png
image.png
image.png

结束

需要源码的可以关注公众号【温故知新之java】,更多干活与你分享。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容