miemie 5 سال پیش
والد
کامیت
15ea38bb9c

+ 7 - 19
mybatis-plus-boot-starter/src/main/java/com/baomidou/mybatisplus/autoconfigure/MybatisPlusLanguageDriverAutoConfiguration.java

@@ -15,6 +15,9 @@
  */
 package com.baomidou.mybatisplus.autoconfigure;
 
+import com.baomidou.mybatisplus.autoconfigure.scripting.MybatisFreeMarkerLanguageDriver;
+import com.baomidou.mybatisplus.autoconfigure.scripting.MybatisThymeleafLanguageDriver;
+import com.baomidou.mybatisplus.autoconfigure.scripting.MybatisVelocityLanguageDriver;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import org.apache.ibatis.scripting.LanguageDriver;
 import org.mybatis.scripting.freemarker.FreeMarkerLanguageDriver;
@@ -54,7 +57,7 @@ public class MybatisPlusLanguageDriverAutoConfiguration {
         @Bean
         @ConditionalOnMissingBean
         FreeMarkerLanguageDriver freeMarkerLanguageDriver() {
-            return new FreeMarkerLanguageDriver();
+            return new MybatisFreeMarkerLanguageDriver();
         }
     }
 
@@ -67,7 +70,7 @@ public class MybatisPlusLanguageDriverAutoConfiguration {
         @Bean
         @ConditionalOnMissingBean
         FreeMarkerLanguageDriver freeMarkerLanguageDriver(FreeMarkerLanguageDriverConfig config) {
-            return new FreeMarkerLanguageDriver(config);
+            return new MybatisFreeMarkerLanguageDriver(config);
         }
 
         @Bean
@@ -78,21 +81,6 @@ public class MybatisPlusLanguageDriverAutoConfiguration {
         }
     }
 
-    /**
-     * Configuration class for mybatis-velocity 2.0 or under.
-     */
-    @Configuration
-    @ConditionalOnClass(org.mybatis.scripting.velocity.Driver.class)
-    @ConditionalOnMissingClass("org.mybatis.scripting.velocity.VelocityLanguageDriverConfig")
-    @SuppressWarnings("deprecation")
-    public static class LegacyVelocityConfiguration {
-        @Bean
-        @ConditionalOnMissingBean
-        org.mybatis.scripting.velocity.Driver velocityLanguageDriver() {
-            return new org.mybatis.scripting.velocity.Driver();
-        }
-    }
-
     /**
      * Configuration class for mybatis-velocity 2.1.x or above.
      */
@@ -102,7 +90,7 @@ public class MybatisPlusLanguageDriverAutoConfiguration {
         @Bean
         @ConditionalOnMissingBean
         VelocityLanguageDriver velocityLanguageDriver(VelocityLanguageDriverConfig config) {
-            return new VelocityLanguageDriver(config);
+            return new MybatisVelocityLanguageDriver(config);
         }
 
         @Bean
@@ -119,7 +107,7 @@ public class MybatisPlusLanguageDriverAutoConfiguration {
         @Bean
         @ConditionalOnMissingBean
         ThymeleafLanguageDriver thymeleafLanguageDriver(ThymeleafLanguageDriverConfig config) {
-            return new ThymeleafLanguageDriver(config);
+            return new MybatisThymeleafLanguageDriver(config);
         }
 
         @Bean

+ 26 - 0
mybatis-plus-boot-starter/src/main/java/com/baomidou/mybatisplus/autoconfigure/scripting/MybatisFreeMarkerLanguageDriver.java

@@ -0,0 +1,26 @@
+package com.baomidou.mybatisplus.autoconfigure.scripting;
+
+import com.baomidou.mybatisplus.core.MybatisParameterHandler;
+import lombok.NoArgsConstructor;
+import org.apache.ibatis.executor.parameter.ParameterHandler;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.mybatis.scripting.freemarker.FreeMarkerLanguageDriver;
+import org.mybatis.scripting.freemarker.FreeMarkerLanguageDriverConfig;
+
+/**
+ * @author miemie
+ * @since 2020-06-18
+ */
+@NoArgsConstructor
+public class MybatisFreeMarkerLanguageDriver extends FreeMarkerLanguageDriver {
+
+    public MybatisFreeMarkerLanguageDriver(FreeMarkerLanguageDriverConfig driverConfig) {
+        super(driverConfig);
+    }
+
+    @Override
+    public ParameterHandler createParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {
+        return new MybatisParameterHandler(mappedStatement, parameterObject, boundSql);
+    }
+}

+ 31 - 0
mybatis-plus-boot-starter/src/main/java/com/baomidou/mybatisplus/autoconfigure/scripting/MybatisThymeleafLanguageDriver.java

@@ -0,0 +1,31 @@
+package com.baomidou.mybatisplus.autoconfigure.scripting;
+
+import com.baomidou.mybatisplus.core.MybatisParameterHandler;
+import lombok.NoArgsConstructor;
+import org.apache.ibatis.executor.parameter.ParameterHandler;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.mybatis.scripting.thymeleaf.ThymeleafLanguageDriver;
+import org.mybatis.scripting.thymeleaf.ThymeleafLanguageDriverConfig;
+import org.thymeleaf.ITemplateEngine;
+
+/**
+ * @author miemie
+ * @since 2020-06-18
+ */
+@NoArgsConstructor
+public class MybatisThymeleafLanguageDriver extends ThymeleafLanguageDriver {
+
+    public MybatisThymeleafLanguageDriver(ThymeleafLanguageDriverConfig config) {
+        super(config);
+    }
+
+    public MybatisThymeleafLanguageDriver(ITemplateEngine templateEngine) {
+        super(templateEngine);
+    }
+
+    @Override
+    public ParameterHandler createParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {
+        return new MybatisParameterHandler(mappedStatement, parameterObject, boundSql);
+    }
+}

+ 26 - 0
mybatis-plus-boot-starter/src/main/java/com/baomidou/mybatisplus/autoconfigure/scripting/MybatisVelocityLanguageDriver.java

@@ -0,0 +1,26 @@
+package com.baomidou.mybatisplus.autoconfigure.scripting;
+
+import com.baomidou.mybatisplus.core.MybatisParameterHandler;
+import lombok.NoArgsConstructor;
+import org.apache.ibatis.executor.parameter.ParameterHandler;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.mybatis.scripting.velocity.VelocityLanguageDriver;
+import org.mybatis.scripting.velocity.VelocityLanguageDriverConfig;
+
+/**
+ * @author miemie
+ * @since 2020-06-18
+ */
+@NoArgsConstructor
+public class MybatisVelocityLanguageDriver extends VelocityLanguageDriver {
+
+    public MybatisVelocityLanguageDriver(VelocityLanguageDriverConfig driverConfig) {
+        super(driverConfig);
+    }
+
+    @Override
+    public ParameterHandler createParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {
+        return new MybatisParameterHandler(mappedStatement, parameterObject, boundSql);
+    }
+}

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

@@ -18,7 +18,7 @@ import java.util.Properties;
  * @author miemie
  * @since 2020-06-16
  */
-@SuppressWarnings({"rawtypes", "unchecked"})
+@SuppressWarnings({"rawtypes"})
 @Intercepts(
     {
         @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}),

+ 0 - 14
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/count/CountSqlParser.java

@@ -1,14 +0,0 @@
-package com.baomidou.mybatisplus.extension.plugins.pagination.count;
-
-/**
- * @author miemie
- * @since 2020-06-16
- */
-public interface CountSqlParser {
-
-    String parser(String sql);
-
-    default String defaultCount(String sql) {
-        return String.format("SELECT COUNT(1) FROM ( %s ) TOTAL", sql);
-    }
-}

+ 0 - 105
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/count/JsqlParserCountSqlParser.java

@@ -1,105 +0,0 @@
-package com.baomidou.mybatisplus.extension.plugins.pagination.count;
-
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringPool;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import net.sf.jsqlparser.expression.Alias;
-import net.sf.jsqlparser.expression.Expression;
-import net.sf.jsqlparser.expression.Function;
-import net.sf.jsqlparser.expression.LongValue;
-import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
-import net.sf.jsqlparser.parser.CCJSqlParserUtil;
-import net.sf.jsqlparser.schema.Table;
-import net.sf.jsqlparser.statement.select.*;
-import org.apache.ibatis.logging.Log;
-import org.apache.ibatis.logging.LogFactory;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
-/**
- * @author miemie
- * @since 2020-06-16
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class JsqlParserCountSqlParser implements CountSqlParser {
-
-    private static final List<SelectItem> COUNT_SELECT_ITEM = Collections.singletonList(defaultCountSelectItem());
-    private final Log logger = LogFactory.getLog(JsqlParserCountSqlParser.class);
-
-    private boolean optimizeJoin = false;
-
-    /**
-     * 获取jsqlparser中count的SelectItem
-     */
-    private static SelectItem defaultCountSelectItem() {
-        Function function = new Function();
-        ExpressionList expressionList = new ExpressionList(Collections.singletonList(new LongValue(1)));
-        function.setName("COUNT");
-        function.setParameters(expressionList);
-        return new SelectExpressionItem(function);
-    }
-
-    @Override
-    public String parser(String originalSql) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("JsqlParserCountOptimize sql=" + originalSql);
-        }
-        try {
-            Select selectStatement = (Select) CCJSqlParserUtil.parse(originalSql);
-            PlainSelect plainSelect = (PlainSelect) selectStatement.getSelectBody();
-            Distinct distinct = plainSelect.getDistinct();
-            GroupByElement groupBy = plainSelect.getGroupBy();
-            List<OrderByElement> orderBy = plainSelect.getOrderByElements();
-
-            // 添加包含groupBy 不去除orderBy
-            if (null == groupBy && CollectionUtils.isNotEmpty(orderBy)) {
-                plainSelect.setOrderByElements(null);
-            }
-            //#95 Github, selectItems contains #{} ${}, which will be translated to ?, and it may be in a function: power(#{myInt},2)
-            for (SelectItem item : plainSelect.getSelectItems()) {
-                if (item.toString().contains(StringPool.QUESTION_MARK)) {
-                    return defaultCount(selectStatement.toString());
-                }
-            }
-            // 包含 distinct、groupBy不优化
-            if (distinct != null || null != groupBy) {
-                return defaultCount(selectStatement.toString());
-            }
-            // 包含 join 连表,进行判断是否移除 join 连表
-            List<Join> joins = plainSelect.getJoins();
-            if (optimizeJoin && CollectionUtils.isNotEmpty(joins)) {
-                boolean canRemoveJoin = true;
-                String whereS = Optional.ofNullable(plainSelect.getWhere()).map(Expression::toString).orElse(StringPool.EMPTY);
-                for (Join join : joins) {
-                    if (!join.isLeft()) {
-                        canRemoveJoin = false;
-                        break;
-                    }
-                    Table table = (Table) join.getRightItem();
-                    String str = Optional.ofNullable(table.getAlias()).map(Alias::getName).orElse(table.getName()) + StringPool.DOT;
-                    String onExpressionS = join.getOnExpression().toString();
-                    /* 如果 join 里包含 ?(代表有入参) 或者 where 条件里包含使用 join 的表的字段作条件,就不移除 join */
-                    if (onExpressionS.contains(StringPool.QUESTION_MARK) || whereS.contains(str)) {
-                        canRemoveJoin = false;
-                        break;
-                    }
-                }
-                if (canRemoveJoin) {
-                    plainSelect.setJoins(null);
-                }
-            }
-            // 优化 SQL
-            plainSelect.setSelectItems(COUNT_SELECT_ITEM);
-            return defaultCount(selectStatement.toString());
-        } catch (Throwable e) {
-            // 无法优化使用原 SQL
-            return defaultCount(originalSql);
-        }
-    }
-}