From 8abd1df9b82b109846f1323d17d11778dba0c300 Mon Sep 17 00:00:00 2001 From: GUO <1923636941@qq.com> Date: Sun, 26 May 2024 00:52:32 +0800 Subject: [PATCH] =?UTF-8?q?join=E5=81=9A=E6=95=B0=E6=8D=AE=E6=9D=83?= =?UTF-8?q?=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhgd/mybatis/DataScopeInterceptor.java | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/zhgd/mybatis/DataScopeInterceptor.java b/src/main/java/com/zhgd/mybatis/DataScopeInterceptor.java index f398505a9..511ed8a2f 100644 --- a/src/main/java/com/zhgd/mybatis/DataScopeInterceptor.java +++ b/src/main/java/com/zhgd/mybatis/DataScopeInterceptor.java @@ -1,5 +1,6 @@ package com.zhgd.mybatis; +import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.parser.SqlParserHelper; @@ -30,10 +31,7 @@ import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.SQLException; -import java.util.Arrays; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; +import java.util.*; @Slf4j public class DataScopeInterceptor extends JsqlParserSupport implements InnerInterceptor { @@ -150,6 +148,14 @@ public class DataScopeInterceptor extends JsqlParserSupport implements InnerInte } else { processFromItem(fromItem, obj); } + + // 如果还存在关联查询 + List joins = plainSelect.getJoins(); + if (CollUtil.isNotEmpty(joins)) { + for (Join join : joins) { + processJoin(join,obj); + } + } } protected void processFromItem(FromItem fromItem, Object obj) { @@ -160,4 +166,17 @@ public class DataScopeInterceptor extends JsqlParserSupport implements InnerInte } } } + + /** + * 处理关联查询 + * + * @param join 关联查询 + * @param obj + */ + protected void processJoin(Join join, Object obj) { + FromItem joinTable = join.getRightItem(); + if (joinTable instanceof SubSelect) { + processSelectBody(((SubSelect) joinTable).getSelectBody(),obj); + } + } }