瀏覽代碼

优化 count sql 解析器

= 8 年之前
父節點
當前提交
bff9e33ce4

+ 3 - 23
src/main/java/com/baomidou/mybatisplus/parser/AbstractSqlParser.java

@@ -30,36 +30,16 @@ public abstract class AbstractSqlParser {
 
     // 日志
     protected static final Log logger = LogFactory.getLog(AbstractSqlParser.class);
-    private String sql;// SQL 语句
-    private String dbType; // 数据库类型
-
-    public AbstractSqlParser(String sql, String dbType) {
-        this.sql = sql;
-        this.dbType = dbType;
-    }
 
     /**
      * <p>
      * 获取优化 SQL 方法
      * </p>
      *
+     * @param sql    SQL 语句
+     * @param dbType 数据库类型
      * @return SQL 信息
      */
-    public abstract SqlInfo optimizeSql();
-
-    public String getSql() {
-        return sql;
-    }
-
-    public void setSql(String sql) {
-        this.sql = sql;
-    }
-
-    public String getDbType() {
-        return dbType;
-    }
+    public abstract SqlInfo optimizeSql(String sql, String dbType);
 
-    public void setDbType(String dbType) {
-        this.dbType = dbType;
-    }
 }

+ 1 - 7
src/main/java/com/baomidou/mybatisplus/plugins/pagination/optimize/AliDruidCountOptimize.java

@@ -29,14 +29,8 @@ import com.baomidou.mybatisplus.parser.SqlInfo;
  */
 public class AliDruidCountOptimize extends AbstractSqlParser {
 
-    public AliDruidCountOptimize(String sql, String dbType) {
-        super(sql, dbType);
-    }
-
     @Override
-    public SqlInfo optimizeSql() {
-        String sql = this.getSql();
-        String dbType = this.getDbType();
+    public SqlInfo optimizeSql(String sql, String dbType) {
         if (logger.isDebugEnabled()) {
             logger.debug(" AliDruidCountOptimize sql=" + sql + ", dbType=" + dbType);
         }

+ 1 - 7
src/main/java/com/baomidou/mybatisplus/plugins/pagination/optimize/DefaultCountOptimize.java

@@ -28,14 +28,8 @@ import com.baomidou.mybatisplus.parser.SqlInfo;
  */
 public class DefaultCountOptimize extends AbstractSqlParser {
 
-    public DefaultCountOptimize(String sql, String dbType) {
-        super(sql, dbType);
-    }
-
     @Override
-    public SqlInfo optimizeSql() {
-        String sql = this.getSql();
-        String dbType = this.getDbType();
+    public SqlInfo optimizeSql(String sql, String dbType) {
         if (logger.isDebugEnabled()) {
             logger.debug(" DefaultCountOptimize sql=" + sql + ", dbType=" + dbType);
         }

+ 2 - 8
src/main/java/com/baomidou/mybatisplus/plugins/pagination/optimize/JsqlParserCountOptimize.java

@@ -44,17 +44,11 @@ import net.sf.jsqlparser.statement.select.SelectItem;
  * @since 2017-06-20
  */
 public class JsqlParserCountOptimize extends AbstractSqlParser {
-    private static final List<SelectItem> countSelectItem = countSelectItem();
-
-    public JsqlParserCountOptimize(String sql, String dbType) {
-        super(sql, dbType);
-    }
 
+    private static final List<SelectItem> countSelectItem = countSelectItem();
 
     @Override
-    public SqlInfo optimizeSql() {
-        String sql = this.getSql();
-        String dbType = this.getDbType();
+    public SqlInfo optimizeSql(String sql, String dbType) {
         if (logger.isDebugEnabled()) {
             logger.debug(" JsqlParserCountOptimize sql=" + sql + ", dbType=" + dbType);
         }

+ 2 - 6
src/main/java/com/baomidou/mybatisplus/plugins/tenancy/TenancySqlParser.java

@@ -58,15 +58,11 @@ import net.sf.jsqlparser.statement.update.Update;
  * @since 2017-06-20
  */
 public class TenancySqlParser extends AbstractSqlParser {
-    private TenantInfo tenantInfo;
 
-    public TenancySqlParser(String sql, String dbType) {
-        super(sql, dbType);
-    }
+    private TenantInfo tenantInfo;
 
     @Override
-    public SqlInfo optimizeSql() {
-        String sql = this.getSql();
+    public SqlInfo optimizeSql(String sql, String dbType) {
         //logger.debug("old sql:{}", sql);
         Statement stmt = null;
         try {

+ 23 - 19
src/main/java/com/baomidou/mybatisplus/toolkit/SqlUtils.java

@@ -35,7 +35,9 @@ import com.baomidou.mybatisplus.parser.SqlInfo;
 public class SqlUtils {
 
     private final static SqlFormatter sqlFormatter = new SqlFormatter();
-    public static final String SQL_BASE_COUNT = "SELECT COUNT(1) FROM ( %s ) TOTAL";
+    public final static String SQL_BASE_COUNT = "SELECT COUNT(1) FROM ( %s ) TOTAL";
+    public static AbstractSqlParser COUNT_SQL_PARSER = null;
+
 
     /**
      * <p>
@@ -63,25 +65,27 @@ public class SqlUtils {
             return sqlInfo;
         }
 
-        // 用户自定义 COUNT SQL 解析
-        if (null != sqlParser) {
-            return sqlParser.optimizeSql();
-        }
-
-        // 默认存在的优化类型
-        switch (opType) {
-            case ALI_DRUID:
-                sqlParser = new AliDruidCountOptimize(originalSql, dialectType);
-                break;
-            case JSQLPARSER:
-                sqlParser = new JsqlParserCountOptimize(originalSql, dialectType);
-                break;
-            default:
-                sqlParser = new DefaultCountOptimize(originalSql, dialectType);
-                break;
+        // COUNT SQL 解析器
+        if (null == COUNT_SQL_PARSER) {
+            if (null != sqlParser) {
+                // 用户自定义 COUNT SQL 解析
+                COUNT_SQL_PARSER = sqlParser;
+            } else {
+                // 默认存在的优化类型
+                switch (opType) {
+                    case ALI_DRUID:
+                        COUNT_SQL_PARSER = new AliDruidCountOptimize();
+                        break;
+                    case JSQLPARSER:
+                        COUNT_SQL_PARSER = new JsqlParserCountOptimize();
+                        break;
+                    default:
+                        COUNT_SQL_PARSER = new DefaultCountOptimize();
+                        break;
+                }
+            }
         }
-
-        return sqlParser.optimizeSql();
+        return COUNT_SQL_PARSER.optimizeSql(originalSql, dialectType);
     }
 
     /**