From 1fc41f1443edaedb59cc68d460345f0d99933a83 Mon Sep 17 00:00:00 2001
From: cat_shark <1716967236@qq.com>
Date: Wed, 27 May 2026 21:24:15 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20MyBatis-Plus=20?=
=?UTF-8?q?=E5=A4=9A=E7=A7=9F=E6=88=B7=E9=85=8D=E7=BD=AE=EF=BC=8C=E8=87=AA?=
=?UTF-8?q?=E5=8A=A8=E6=B3=A8=E5=85=A5=E8=A1=8C=E7=BA=A7=E6=95=B0=E6=8D=AE?=
=?UTF-8?q?=E9=9A=94=E7=A6=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
.../config/MybatisPlusConfig.java | 54 +++++++++++++++++++
2 files changed, 55 insertions(+), 1 deletion(-)
create mode 100644 src/main/java/com/guo/learningprogresstracker/config/MybatisPlusConfig.java
diff --git a/pom.xml b/pom.xml
index 9a91bd7..605e56d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -142,7 +142,7 @@
true
17
17
- --enable-preview
+
org.projectlombok
diff --git a/src/main/java/com/guo/learningprogresstracker/config/MybatisPlusConfig.java b/src/main/java/com/guo/learningprogresstracker/config/MybatisPlusConfig.java
new file mode 100644
index 0000000..d956761
--- /dev/null
+++ b/src/main/java/com/guo/learningprogresstracker/config/MybatisPlusConfig.java
@@ -0,0 +1,54 @@
+package com.guo.learningprogresstracker.config;
+
+import cn.dev33.satoken.stp.StpUtil;
+import net.sf.jsqlparser.expression.StringValue;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
+import net.sf.jsqlparser.expression.Expression;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * MyBatis-Plus 多租户配置
+ * 利用 TenantLineInnerInterceptor 自动在 SELECT/UPDATE/DELETE 语句中
+ * 注入 WHERE created_by = #{当前登录用户},实现行级数据隔离。
+ */
+@Configuration
+public class MybatisPlusConfig {
+
+ /**
+ * 不需要租户过滤的表(仅排除不含 created_by 的系统表)
+ */
+ private static final List EXCLUDE_TABLES = Arrays.asList(
+ "user",
+ "flyway_schema_history",
+ "databasechangelog",
+ "databasechangeloglock"
+ );
+
+ @Bean
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
+ @Override
+ public Expression getTenantId() {
+ return new StringValue(StpUtil.getLoginIdAsString());
+ }
+
+ @Override
+ public String getTenantIdColumn() {
+ return "created_by";
+ }
+
+ @Override
+ public boolean ignoreTable(String tableName) {
+ return EXCLUDE_TABLES.contains(tableName.toLowerCase());
+ }
+ }));
+ return interceptor;
+ }
+}