Browse Source

分页插件去除不必要属性

Caratacus 8 years ago
parent
commit
57b4fff6a2

+ 1 - 2
src/main/java/com/baomidou/mybatisplus/parser/AbstractSqlParser.java

@@ -37,9 +37,8 @@ public abstract class AbstractSqlParser {
      * </p>
      *
      * @param sql    SQL 语句
-     * @param dbType 数据库类型
      * @return SQL 信息
      */
-    public abstract SqlInfo optimizeSql(String sql, String dbType);
+    public abstract SqlInfo optimizeSql(String sql);
 
 }

+ 6 - 22
src/main/java/com/baomidou/mybatisplus/plugins/PaginationInterceptor.java

@@ -37,6 +37,7 @@ import org.apache.ibatis.scripting.defaults.DefaultParameterHandler;
 import org.apache.ibatis.session.RowBounds;
 
 import com.baomidou.mybatisplus.MybatisDefaultParameterHandler;
+import com.baomidou.mybatisplus.enums.DBType;
 import com.baomidou.mybatisplus.parser.AbstractSqlParser;
 import com.baomidou.mybatisplus.parser.SqlInfo;
 import com.baomidou.mybatisplus.plugins.pagination.DialectFactory;
@@ -57,16 +58,13 @@ import com.baomidou.mybatisplus.toolkit.StringUtils;
  */
 @Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})})
 public class PaginationInterceptor implements Interceptor {
+
     // 日志
     private static final Log logger = LogFactory.getLog(PaginationInterceptor.class);
     // COUNT SQL 解析
     private AbstractSqlParser sqlParser;
     /* 溢出总页数,设置第一页 */
     private boolean overflowCurrent = false;
-    /* 是否设置动态数据源 设置之后动态获取当前数据源 */
-    private boolean dynamicDataSource = false;
-    /* 方言类型 */
-    private String dialectType;
     /* 方言实现类 */
     private String dialectClazz;
     /* 是否开启 PageHelper localPage 模式 */
@@ -100,14 +98,12 @@ public class PaginationInterceptor implements Interceptor {
         BoundSql boundSql = (BoundSql) metaStatementHandler.getValue("delegate.boundSql");
         String originalSql = boundSql.getSql();
         Connection connection = (Connection) invocation.getArgs()[0];
-        if (this.dynamicDataSource) {
-            dialectType = JdbcUtils.getDbType(connection.getMetaData().getURL()).getDb();
-        }
+        DBType dbType = JdbcUtils.getDbType(connection.getMetaData().getURL());
         if (rowBounds instanceof Pagination) {
             Pagination page = (Pagination) rowBounds;
             boolean orderBy = true;
             if (page.isSearchCount()) {
-                SqlInfo sqlInfo = SqlUtils.getCountOptimize(sqlParser, originalSql, dialectType);
+                SqlInfo sqlInfo = SqlUtils.getCountOptimize(sqlParser, originalSql);
                 orderBy = sqlInfo.isOrderBy();
                 this.queryTotal(sqlInfo.getSql(), mappedStatement, boundSql, page, connection);
                 if (page.getTotal() <= 0) {
@@ -115,10 +111,10 @@ public class PaginationInterceptor implements Interceptor {
                 }
             }
             String buildSql = SqlUtils.concatOrderBy(originalSql, page, orderBy);
-            originalSql = DialectFactory.buildPaginationSql(page, buildSql, dialectType, dialectClazz);
+            originalSql = DialectFactory.buildPaginationSql(page, buildSql, dbType, dialectClazz);
         } else {
             // support physical Pagination for RowBounds
-            originalSql = DialectFactory.buildPaginationSql(rowBounds, originalSql, dialectType, dialectClazz);
+            originalSql = DialectFactory.buildPaginationSql(rowBounds, originalSql, dbType, dialectClazz);
         }
 
 		/*
@@ -171,21 +167,13 @@ public class PaginationInterceptor implements Interceptor {
     }
 
     public void setProperties(Properties prop) {
-        String dialectType = prop.getProperty("dialectType");
         String dialectClazz = prop.getProperty("dialectClazz");
 
-        if (StringUtils.isNotEmpty(dialectType)) {
-            this.dialectType = dialectType;
-        }
         if (StringUtils.isNotEmpty(dialectClazz)) {
             this.dialectClazz = dialectClazz;
         }
     }
 
-    public void setDialectType(String dialectType) {
-        this.dialectType = dialectType;
-    }
-
     public void setDialectClazz(String dialectClazz) {
         this.dialectClazz = dialectClazz;
     }
@@ -194,10 +182,6 @@ public class PaginationInterceptor implements Interceptor {
         this.overflowCurrent = overflowCurrent;
     }
 
-    public void setDynamicDataSource(boolean dynamicDataSource) {
-        this.dynamicDataSource = dynamicDataSource;
-    }
-
     public void setSqlParser(AbstractSqlParser sqlParser) {
         this.sqlParser = sqlParser;
     }

+ 13 - 14
src/main/java/com/baomidou/mybatisplus/plugins/pagination/DialectFactory.java

@@ -15,10 +15,9 @@
  */
 package com.baomidou.mybatisplus.plugins.pagination;
 
-import static com.baomidou.mybatisplus.enums.DBType.getDBType;
-
 import org.apache.ibatis.session.RowBounds;
 
+import com.baomidou.mybatisplus.enums.DBType;
 import com.baomidou.mybatisplus.exceptions.MybatisPlusException;
 import com.baomidou.mybatisplus.plugins.pagination.dialects.DB2Dialect;
 import com.baomidou.mybatisplus.plugins.pagination.dialects.H2Dialect;
@@ -48,15 +47,15 @@ public class DialectFactory {
      *
      * @param page         翻页对象
      * @param buildSql     执行 SQL
-     * @param dialectType  方言类型
+     * @param dbType  数据库类型
      * @param dialectClazz 自定义方言实现类
      * @return
      * @throws Exception
      */
-    public static String buildPaginationSql(Pagination page, String buildSql, String dialectType, String dialectClazz)
+    public static String buildPaginationSql(Pagination page, String buildSql, DBType dbType, String dialectClazz)
             throws Exception {
         // fix #172, 196
-        return getiDialect(dialectType, dialectClazz).buildPaginationSql(buildSql, page.getOffsetCurrent(), page.getSize());
+        return getiDialect(dbType, dialectClazz).buildPaginationSql(buildSql, page.getOffsetCurrent(), page.getSize());
     }
 
     /**
@@ -65,15 +64,15 @@ public class DialectFactory {
      *
      * @param rowBounds
      * @param buildSql
-     * @param dialectType
+     * @param dbType
      * @param dialectClazz
      * @return
      * @throws Exception
      */
-    public static String buildPaginationSql(RowBounds rowBounds, String buildSql, String dialectType, String dialectClazz)
+    public static String buildPaginationSql(RowBounds rowBounds, String buildSql, DBType dbType, String dialectClazz)
             throws Exception {
         // fix #196
-        return getiDialect(dialectType, dialectClazz).buildPaginationSql(buildSql, rowBounds.getOffset(), rowBounds.getLimit());
+        return getiDialect(dbType, dialectClazz).buildPaginationSql(buildSql, rowBounds.getOffset(), rowBounds.getLimit());
     }
 
     /**
@@ -81,15 +80,15 @@ public class DialectFactory {
      * 获取数据库方言
      * </p>
      *
-     * @param dialectType  方言类型
+     * @param dbType       数据库类型
      * @param dialectClazz 自定义方言实现类
      * @return
      * @throws Exception
      */
-    private static IDialect getiDialect(String dialectType, String dialectClazz) throws Exception {
+    private static IDialect getiDialect(DBType dbType, String dialectClazz) throws Exception {
         IDialect dialect = null;
-        if (StringUtils.isNotEmpty(dialectType)) {
-            dialect = getDialectByDbtype(dialectType);
+        if (StringUtils.checkValNotNull(dbType)) {
+            dialect = getDialectByDbtype(dbType);
         } else {
             if (StringUtils.isNotEmpty(dialectClazz)) {
                 try {
@@ -118,9 +117,9 @@ public class DialectFactory {
      * @return
      * @throws Exception
      */
-    private static IDialect getDialectByDbtype(String dbType) {
+    private static IDialect getDialectByDbtype(DBType dbType) {
         IDialect dialect;
-        switch (getDBType(dbType)) {
+        switch (dbType) {
             case MYSQL:
                 dialect = MySqlDialect.INSTANCE;
                 break;

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

@@ -48,9 +48,9 @@ public class JsqlParserCountOptimize extends AbstractSqlParser {
     private static final List<SelectItem> countSelectItem = countSelectItem();
 
     @Override
-    public SqlInfo optimizeSql(String sql, String dbType) {
+    public SqlInfo optimizeSql(String sql) {
         if (logger.isDebugEnabled()) {
-            logger.debug(" JsqlParserCountOptimize sql=" + sql + ", dbType=" + dbType);
+            logger.debug(" JsqlParserCountOptimize sql=" + sql);
         }
         SqlInfo sqlInfo = SqlInfo.newInstance();
         try {
@@ -71,7 +71,6 @@ public class JsqlParserCountOptimize extends AbstractSqlParser {
                 sqlInfo.setSql(String.format(SqlUtils.SQL_BASE_COUNT, selectStatement.toString()));
                 return sqlInfo;
             }
-
             // 优化 SQL
             plainSelect.setSelectItems(countSelectItem);
             sqlInfo.setSql(selectStatement.toString());

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

@@ -62,7 +62,7 @@ public class TenancySqlParser extends AbstractSqlParser {
     private TenantInfo tenantInfo;
 
     @Override
-    public SqlInfo optimizeSql(String sql, String dbType) {
+    public SqlInfo optimizeSql(String sql) {
         //logger.debug("old sql:{}", sql);
         Statement stmt = null;
         try {

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

@@ -41,11 +41,11 @@ public class SqlUtils {
      * 获取CountOptimize
      * </p>
      *
-     * @param sqlParser       Count SQL 解析类
-     * @param originalSql     需要计算Count SQL
+     * @param sqlParser   Count SQL 解析类
+     * @param originalSql 需要计算Count SQL
      * @return SqlInfo
      */
-    public static SqlInfo getCountOptimize(AbstractSqlParser sqlParser, String originalSql, String dialectType) {
+    public static SqlInfo getCountOptimize(AbstractSqlParser sqlParser, String originalSql) {
         // COUNT SQL 解析器
         if (null == COUNT_SQL_PARSER) {
             if (null != sqlParser) {
@@ -56,7 +56,7 @@ public class SqlUtils {
                 COUNT_SQL_PARSER = new JsqlParserCountOptimize();
             }
         }
-        return COUNT_SQL_PARSER.optimizeSql(originalSql, dialectType);
+        return COUNT_SQL_PARSER.optimizeSql(originalSql, null);
     }
 
     /**