手把手教你MyBatis-Plus高級功能-多租戶的實現(xiàn)!

定義

多租戶其本質是一種數(shù)據隔離的架構,通俗講,既同一套系統(tǒng),不同群體的用戶進來之后,只能看到當前群體用戶所授權的用戶數(shù)據,而看不到其他群體用戶的數(shù)據。舉個例子,比如有一套課程培訓系統(tǒng)開發(fā)給多家公司使用,A公司的員工進入系統(tǒng)只能看到A公司的相關課程,B公司員工進入系統(tǒng),則只能看到B公司相關課程,而A公司的員工看不到B公司的課程,B公司看不到A公司的課程,這就是多租戶。

多租戶的方案

目前多租戶的實現(xiàn)方案大概有這幾種:

  1. 多租戶之間新建獨立數(shù)據庫,自己使用自己的庫,特點是隔離性最好,但成本巨大
  2. 多租戶之間使用同一套數(shù)據庫,使用不同的名稱空間,特點是需要維護多多套名稱空間的表,對數(shù)據庫的性能要求較高
  3. 多租戶之間使用同一套數(shù)據庫,使用相同的名稱空間,在各個表里設置租戶字段,用來標識租戶身份。特點是成本低,開發(fā)復雜度較高。

多租戶搭建

這里我們采用第三種方式搭建。

數(shù)據庫表準備

需要準備兩個表,test表是不需要租戶設置的,test_tenant是需要租戶設置的,表結構如下:

image.png
image.png

自定義上下文

主要是用來從上下文設置和獲取租戶id的

image.png

多租戶handler

主要是從自定義上下文中獲取租戶id,并且攔截執(zhí)行的sql,加上租戶id的添加參數(shù)


image.png
image.png

mybatis-plus打開多租戶配置

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


image.png

租戶切面

主要是定義切面攔截,當客戶端向服務端發(fā)起請求的時候,攔截請求,從請求頭里獲取租戶id,添加到自定義上下文中


image.png

配置文件

這里主要是設置了一個配置參數(shù),對不要設置租戶id的表,可以在這里配置


image.png

測試

新增test表數(shù)據(該表不需要設置租戶id)

image.png
image.png

新增test_tenant表數(shù)據(該表需要設置租戶id)

image.png
image.png
image.png

結束

需要源碼的可以關注公眾號【溫故知新之java】,更多干活與你分享。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容