瀏覽代碼

调整注解跳过策略.

nieqiurong 7 月之前
父節點
當前提交
a22b1abb5f

+ 4 - 6
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/override/MybatisMapperProxy.java

@@ -17,7 +17,7 @@ package com.baomidou.mybatisplus.core.override;
 
 import com.baomidou.mybatisplus.core.plugins.IgnoreStrategy;
 import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper;
-import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.MybatisUtils;
 import org.apache.ibatis.binding.MapperProxy;
 import org.apache.ibatis.reflection.ExceptionUtil;
 import org.apache.ibatis.session.SqlSession;
@@ -167,11 +167,9 @@ public class MybatisMapperProxy<T> implements InvocationHandler, Serializable {
         @Override
         public Object invoke(Object proxy, Method method, Object[] args, SqlSession sqlSession) throws Throwable {
             try {
-                String className = method.getDeclaringClass().getName();
-                IgnoreStrategy ignoreStrategy = InterceptorIgnoreHelper.getIgnoreStrategy(className + StringPool.DOT + method.getName());
-                if (ignoreStrategy == null) {
-                    ignoreStrategy = InterceptorIgnoreHelper.getIgnoreStrategy(className);
-                }
+                MybatisMapperProxy<?> mybatisMapperProxy = MybatisUtils.getMybatisMapperProxy(proxy);
+                Class<?> mapperInterface = mybatisMapperProxy.getMapperInterface();
+                IgnoreStrategy ignoreStrategy = InterceptorIgnoreHelper.findIgnoreStrategy(mapperInterface, method);
                 if (ignoreStrategy != null) {
                     InterceptorIgnoreHelper.handle(ignoreStrategy);
                 }

+ 20 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/plugins/InterceptorIgnoreHelper.java

@@ -49,8 +49,9 @@ public abstract class InterceptorIgnoreHelper {
      * InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());
      * </p>
      * <p>
-     * 注意,需要手动关闭调用方法 InterceptorIgnoreHelper.clearIgnoreStrategy();
+     * 注意,需要手动关闭调用方法 {@link #clearIgnoreStrategy()}
      * </p>
+     * <p>简化操作可请使用{@link #execute(IgnoreStrategy, Supplier)}</p>
      *
      * @param ignoreStrategy {@link IgnoreStrategy}
      */
@@ -112,6 +113,24 @@ public abstract class InterceptorIgnoreHelper {
         }
     }
 
+    /**
+     * 通过方法获取策略信息(优先级方法注解>当前类注解)
+     *
+     * @param method 方法信息
+     * @return 忽略策略信息
+     * @see #initSqlParserInfoCache(Class)
+     * @see #initSqlParserInfoCache(IgnoreStrategy, String, Method)
+     * @since 3.5.10
+     */
+    public static IgnoreStrategy findIgnoreStrategy(Class<?> clz, Method method) {
+        String className = clz.getName();
+        IgnoreStrategy ignoreStrategy = getIgnoreStrategy(method.getDeclaringClass().getName() + StringPool.DOT + method.getName());
+        if (ignoreStrategy == null) {
+            ignoreStrategy = getIgnoreStrategy(className);
+        }
+        return ignoreStrategy;
+    }
+
     /**
      * 初始化缓存
      * <p>

+ 33 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/plugins/InterceptorIgnoreHelperTest.java

@@ -19,6 +19,9 @@ class InterceptorIgnoreHelperTest {
         init(Xx.class);
         init(Pp.class);
         init(Gg.class);
+        init(ExtPp1.class);
+        init(ExtPp2.class);
+        init(ExtPp3.class);
     }
 
     @Test
@@ -43,6 +46,19 @@ class InterceptorIgnoreHelperTest {
 
         // 不存在的
         checkOthers(Pp.class, "mj", "xxxxx", false);
+
+        checkTenantLine(ExtPp1.class, "pp", false);
+        checkTenantLine(ExtPp1.class, "dd", true);
+        checkTenantLine(ExtPp1.class, "mj", false);
+
+        checkTenantLine(ExtPp2.class, "pp", false);
+        checkTenantLine(ExtPp2.class, "dd", true);
+
+        // 缺省取当前类的
+        checkTenantLine(ExtPp2.class, "mj", false);
+
+        checkTenantLine(ExtPp3.class, "mj", true);
+
     }
 
     private void init(Class<?> clazz) {
@@ -102,4 +118,21 @@ class InterceptorIgnoreHelperTest {
 
         void uu();
     }
+
+    interface ExtPp1 extends Pp {
+
+    }
+
+    @InterceptorIgnore(tenantLine = "1")
+    interface ExtPp2 extends Pp {
+
+        @InterceptorIgnore(tenantLine = "false")
+        void mj();
+    }
+
+    @InterceptorIgnore(tenantLine = "true")
+    interface ExtPp3 extends ExtPp2 {
+
+        void mj();
+    }
 }