瀏覽代碼

新增策略执行方法.

nieqiurong 5 月之前
父節點
當前提交
d851eabfe9

+ 30 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/plugins/InterceptorIgnoreHelper.java

@@ -107,6 +107,13 @@ public abstract class InterceptorIgnoreHelper {
 
     /**
      * 按指定策略执行指定方法 (忽略线程级别,参数执行级使用最高)
+     * 方法执行完成后后释放掉当前线程上的忽略策略.
+     * <p>
+     * 注意:
+     * <li>1.不要和{@link #handle(IgnoreStrategy)}一起混合使用,此方法只是简化操作,防止未释放掉资源造成的错误<li/>
+     * <li>2.不要和{@link InterceptorIgnore} 注解一起搭配使用,例如在mapper上的default方法里再调用此方法,最终优先级还是以此方法为准<li/>
+     * <li>3.记住,一旦调用了此方法,开始会覆盖你当前执行线程上的策略,结束必定会释放掉当前线程上的策略</>
+     * </p>
      *
      * @param ignoreStrategy 忽略策略
      * @param supplier       执行方法
@@ -123,6 +130,29 @@ public abstract class InterceptorIgnoreHelper {
         }
     }
 
+    /**
+     * 按指定策略执行指定方法 (忽略线程级别,参数执行级使用最高)
+     * 方法执行完成后后释放掉当前线程上的忽略策略.
+     * <p>
+     * 注意:
+     * <li>1.不要和{@link #handle(IgnoreStrategy)}一起混合使用,此方法只是简化操作,防止未释放掉资源造成的错误<li/>
+     * <li>2.不要和{@link InterceptorIgnore} 注解一起搭配使用,例如在mapper上的default方法里再调用此方法,最终优先级还是以此方法为准<li/>
+     * <li>3.记住,一旦调用了此方法,开始会覆盖你当前执行线程上的策略,结束必定会释放掉当前线程上的策略</>
+     * </p>
+     *
+     * @param ignoreStrategy 忽略策略
+     * @param runnable       执行方法
+     * @since 3.5.10
+     */
+    public static void execute(IgnoreStrategy ignoreStrategy, Runnable runnable) {
+        try {
+            handle(ignoreStrategy);
+            runnable.run();
+        } finally {
+            clearIgnoreStrategy();
+        }
+    }
+
     /**
      * 通过方法获取策略信息(优先级方法注解>当前类注解)
      *

+ 10 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/tenant/TenantTest.java

@@ -125,6 +125,16 @@ public class TenantTest extends BaseDbTest<EntityMapper> {
             Assertions.assertEquals(0, m.deleteById(entity.getId()));
             Assertions.assertEquals(1, InterceptorIgnoreHelper.execute(IgnoreStrategy.builder().tenantLine(true).build(), () -> m.deleteById(entity.getId())));
         });
+
+        doTest(m -> {
+            Entity entity = new Entity().setName("秋秋").setTenantId(2);
+            m.insert(entity);
+            Assertions.assertNull(m.selectById(entity.getId()));
+            InterceptorIgnoreHelper.execute(IgnoreStrategy.builder().tenantLine(true).build(), () -> {
+                Assertions.assertNotNull(m.selectById(entity.getId()));
+                Assertions.assertEquals(1, m.deleteById(entity.getId()));
+            });
+        });
     }
 
     @Override