diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/RelationManager.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/RelationManager.java index ca91ee46..cc07becd 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/RelationManager.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/RelationManager.java @@ -62,6 +62,12 @@ public class RelationManager { private static ThreadLocal> ignoreRelations = new ThreadLocal<>(); + /** + * 每次查询是否自动清除 depth extraConditionParams ignoreRelations 的配置 + */ + private static ThreadLocal autoClearConfig = ThreadLocal.withInitial(() -> true); + + private static List getRelations(Class clazz) { return MapUtil.computeIfAbsent(classRelations, clazz, RelationManager::doGetRelations); } @@ -101,6 +107,11 @@ public class RelationManager { return depthThreadLocal.get(); } + public static void clearMaxDepth() { + extraConditionParams.remove(); + } + + public static void setExtraConditionParams(Map params) { extraConditionParams.set(params); } @@ -118,6 +129,11 @@ public class RelationManager { return extraConditionParams.get(); } + public static void clearExtraConditionParams() { + extraConditionParams.remove(); + } + + public static void setIgnoreRelations(Set ignoreRelations) { RelationManager.ignoreRelations.set(ignoreRelations); } @@ -135,6 +151,23 @@ public class RelationManager { return ignoreRelations.get(); } + public static void clearIgnoreRelations() { + ignoreRelations.remove(); + } + + + public static void setAutoClearConfig(boolean enable) { + autoClearConfig.set(enable); + } + + public static boolean getAutoClearConfig() { + return autoClearConfig.get(); + } + + public static void clearAutoClearConfig() { + autoClearConfig.remove(); + } + static Object[] getExtraConditionParams(List keys) { if (keys == null || keys.isEmpty()) { @@ -155,7 +188,17 @@ public class RelationManager { public static void queryRelations(BaseMapper mapper, List entities) { + doQueryRelations(mapper, entities, 0, depthThreadLocal.get(), ignoreRelations.get()); + + Boolean autoClearEnable = autoClearConfig.get(); + + //自动清除用户配置 + if (autoClearEnable != null && autoClearEnable) { + depthThreadLocal.remove(); + extraConditionParams.remove(); + ignoreRelations.remove(); + } }