Browse Source

优化初始化流程,避免多次调用

miemie 7 years ago
parent
commit
35c82c0ea2

+ 12 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/parser/SqlParserHelper.java

@@ -22,7 +22,9 @@ import org.apache.ibatis.reflection.MetaObject;
 
 import java.lang.reflect.Method;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentSkipListSet;
 
 /**
  * <p>
@@ -39,6 +41,10 @@ public class SqlParserHelper {
      * SQL 解析缓存
      */
     private static final Map<String, Boolean> SQL_PARSER_INFO_CACHE = new ConcurrentHashMap<>();
+    /**
+     * 缓存解析过的 mapperClass
+     */
+    private static final Set<String> CACHE_INIT_MAPPER = new ConcurrentSkipListSet<>();
 
 
     /**
@@ -49,14 +55,19 @@ public class SqlParserHelper {
      * @param mapperClass Mapper Class
      */
     public synchronized static void initSqlParserInfoCache(Class<?> mapperClass) {
+        String mapperClassName = mapperClass.getName();
+        if (CACHE_INIT_MAPPER.contains(mapperClassName)) {
+            return;
+        }
         Method[] methods = mapperClass.getDeclaredMethods();
         for (Method method : methods) {
             SqlParser sqlParser = method.getAnnotation(SqlParser.class);
             if (null != sqlParser) {
-                String sid = mapperClass.getName() + StringPool.DOT + method.getName();
+                String sid = mapperClassName + StringPool.DOT + method.getName();
                 SQL_PARSER_INFO_CACHE.put(sid, sqlParser.filter());
             }
         }
+        CACHE_INIT_MAPPER.add(mapperClassName);
     }