Browse Source

优化Sql解析工具类.

nieqiuqiu 5 years ago
parent
commit
594084178f

+ 1 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/PaginationInterceptor.java

@@ -196,7 +196,7 @@ public class PaginationInterceptor extends AbstractSqlParserHandler implements I
         Connection connection = (Connection) invocation.getArgs()[0];
 
         if (page.isSearchCount() && !page.isHitCount()) {
-            SqlInfo sqlInfo = SqlParserUtils.getOptimizeCountSql(page.optimizeCountSql(), countSqlParser, originalSql);
+            SqlInfo sqlInfo = SqlParserUtils.getOptimizeCountSql(page.optimizeCountSql(), countSqlParser, originalSql, metaObject);
             this.queryTotal(sqlInfo.getSql(), mappedStatement, boundSql, page, connection);
             if (!this.continueLimit(page)) {
                 return null;

+ 14 - 14
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/SqlParserUtils.java

@@ -18,6 +18,9 @@ package com.baomidou.mybatisplus.extension.toolkit;
 import com.baomidou.mybatisplus.core.parser.ISqlParser;
 import com.baomidou.mybatisplus.core.parser.SqlInfo;
 import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
+import org.apache.ibatis.reflection.MetaObject;
+
+import java.util.Optional;
 
 /**
  * SQL 解析工具类
@@ -26,7 +29,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParser
  * @since 2018-07-22
  */
 public class SqlParserUtils {
-    private static ISqlParser COUNT_SQL_PARSER = null;
+
+    private static ISqlParser COUNT_SQL_PARSER = new JsqlParserCountOptimize();
 
     /**
      * 获取 COUNT 原生 SQL 包装
@@ -45,21 +49,17 @@ public class SqlParserUtils {
      * @param sqlParser        Count SQL 解析类
      * @param originalSql      需要计算Count SQL
      * @return SqlInfo
+     * @deprecated 3.3.3
      */
+    @Deprecated
     public static SqlInfo getOptimizeCountSql(boolean optimizeCountSql, ISqlParser sqlParser, String originalSql) {
-        if (!optimizeCountSql) {
-            return SqlInfo.newInstance().setSql(getOriginalCountSql(originalSql));
-        }
-        // COUNT SQL 解析器
-        if (null == COUNT_SQL_PARSER) {
-            if (null != sqlParser) {
-                // 用户自定义 COUNT SQL 解析
-                COUNT_SQL_PARSER = sqlParser;
-            } else {
-                // 默认 JsqlParser 优化 COUNT
-                COUNT_SQL_PARSER = new JsqlParserCountOptimize();
-            }
+        return getOptimizeCountSql(optimizeCountSql, sqlParser, originalSql, null);
+    }
+
+    public static SqlInfo getOptimizeCountSql(boolean optimizeCountSql, ISqlParser sqlParser, String originalSql, MetaObject metaObject) {
+        if (optimizeCountSql) {
+            return Optional.ofNullable(sqlParser).orElseGet(() -> COUNT_SQL_PARSER).parser(metaObject, originalSql);
         }
-        return COUNT_SQL_PARSER.parser(null, originalSql);
+        return SqlInfo.newInstance().setSql(getOriginalCountSql(originalSql));
     }
 }