소스 검색

分页插件去除不必要属性

Caratacus 8 년 전
부모
커밋
a498c6d291

+ 16 - 21
src/main/java/com/baomidou/mybatisplus/plugins/CachePaginationInterceptor.java

@@ -32,10 +32,12 @@ import org.apache.ibatis.reflection.SystemMetaObject;
 import org.apache.ibatis.session.ResultHandler;
 import org.apache.ibatis.session.RowBounds;
 
+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;
 import com.baomidou.mybatisplus.plugins.pagination.Pagination;
+import com.baomidou.mybatisplus.toolkit.JdbcUtils;
 import com.baomidou.mybatisplus.toolkit.PluginUtils;
 import com.baomidou.mybatisplus.toolkit.SqlUtils;
 import com.baomidou.mybatisplus.toolkit.StringUtils;
@@ -51,12 +53,11 @@ import com.baomidou.mybatisplus.toolkit.StringUtils;
 @Intercepts({@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}),
         @Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})})
 public class CachePaginationInterceptor extends PaginationInterceptor implements Interceptor {
+
+    /* 溢出总页数,设置第一页 */
+    private boolean overflowCurrent = false;
     // COUNT SQL 解析
     private AbstractSqlParser sqlParser;
-    /* Count优化方式 */
-    private String optimizeType = "default";
-    /* 方言类型 */
-    private String dialectType;
     /* 方言实现类 */
     private String dialectClazz;
 
@@ -77,22 +78,23 @@ public class CachePaginationInterceptor extends PaginationInterceptor implements
             }
             BoundSql boundSql = (BoundSql) metaStatementHandler.getValue("delegate.boundSql");
             String originalSql = boundSql.getSql();
-
+            Connection connection = (Connection) invocation.getArgs()[0];
+            DBType dbType = JdbcUtils.getDbType(connection.getMetaData().getURL());
             if (rowBounds instanceof Pagination) {
                 Pagination page = (Pagination) rowBounds;
                 boolean orderBy = true;
                 if (page.isSearchCount()) {
                     String tempSql = originalSql.replaceAll("(?i)ORDER[\\s]+BY", "ORDER BY");
                     int orderByIndex = tempSql.toUpperCase().lastIndexOf("ORDER BY");
-                    if(orderByIndex <= -1) {
+                    if (orderByIndex <= -1) {
                         orderBy = false;
                     }
                 }
                 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);
             }
 
             metaStatementHandler.setValue("delegate.boundSql.sql", originalSql);
@@ -112,8 +114,8 @@ public class CachePaginationInterceptor extends PaginationInterceptor implements
             if (rowBounds instanceof Pagination) {
                 Pagination page = (Pagination) rowBounds;
                 if (page.isSearchCount()) {
-                    SqlInfo sqlInfo = SqlUtils.getCountOptimize(sqlParser, originalSql, dialectType);
-                    super.queryTotal(sqlInfo.getSql(), mappedStatement, boundSql, page, connection);
+                    SqlInfo sqlInfo = SqlUtils.getCountOptimize(sqlParser, originalSql);
+                    super.queryTotal(overflowCurrent, sqlInfo.getSql(), mappedStatement, boundSql, page, connection);
                     if (page.getTotal() <= 0) {
                         return invocation.proceed();
                     }
@@ -134,25 +136,18 @@ public class CachePaginationInterceptor extends PaginationInterceptor implements
     }
 
     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 setSqlParser(AbstractSqlParser sqlParser) {
+        this.sqlParser = sqlParser;
     }
 
-    public void setOptimizeType(String optimizeType) {
-        this.optimizeType = optimizeType;
+    public void setOverflowCurrent(boolean overflowCurrent) {
+        this.overflowCurrent = overflowCurrent;
     }
 
-    public void setSqlParser(AbstractSqlParser sqlParser) {
-        this.sqlParser = sqlParser;
-    }
 }

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

@@ -105,7 +105,7 @@ public class PaginationInterceptor implements Interceptor {
             if (page.isSearchCount()) {
                 SqlInfo sqlInfo = SqlUtils.getCountOptimize(sqlParser, originalSql);
                 orderBy = sqlInfo.isOrderBy();
-                this.queryTotal(sqlInfo.getSql(), mappedStatement, boundSql, page, connection);
+                this.queryTotal(overflowCurrent, sqlInfo.getSql(), mappedStatement, boundSql, page, connection);
                 if (page.getTotal() <= 0) {
                     return invocation.proceed();
                 }
@@ -135,7 +135,7 @@ public class PaginationInterceptor implements Interceptor {
      * @param boundSql
      * @param page
      */
-    protected void queryTotal(String sql, MappedStatement mappedStatement, BoundSql boundSql, Pagination page, Connection connection) {
+    protected void queryTotal(boolean overflowCurrent, String sql, MappedStatement mappedStatement, BoundSql boundSql, Pagination page, Connection connection) {
         try (PreparedStatement statement = connection.prepareStatement(sql)) {
             DefaultParameterHandler parameterHandler = new MybatisDefaultParameterHandler(mappedStatement, boundSql.getParameterObject(), boundSql);
             parameterHandler.setParameters(statement);

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

@@ -56,7 +56,7 @@ public class SqlUtils {
                 COUNT_SQL_PARSER = new JsqlParserCountOptimize();
             }
         }
-        return COUNT_SQL_PARSER.optimizeSql(originalSql, null);
+        return COUNT_SQL_PARSER.optimizeSql(originalSql);
     }
 
     /**

+ 1 - 1
src/test/java/com/baomidou/mybatisplus/test/SqlUtilsTest.java

@@ -17,7 +17,7 @@ import com.baomidou.mybatisplus.plugins.pagination.optimize.JsqlParserCountOptim
 public class SqlUtilsTest {
 
     public SqlInfo jsqlParserCountSqlInfo(String sql) {
-        return new JsqlParserCountOptimize().optimizeSql(sql, "mysql");
+        return new JsqlParserCountOptimize().optimizeSql(sql);
     }
 
     /**

+ 0 - 1
src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusConfig.java

@@ -42,7 +42,6 @@ public class MybatisPlusConfig {
         configuration.setJdbcTypeForNull(JdbcType.NULL);
         sqlSessionFactory.setConfiguration(configuration);
         PaginationInterceptor pagination = new PaginationInterceptor();
-        pagination.setDialectType("h2");
         OptimisticLockerInterceptor optLock = new OptimisticLockerInterceptor();
         sqlSessionFactory.setPlugins(new Interceptor[]{
                 pagination,

+ 0 - 1
src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusLoginDeleteConfig.java

@@ -42,7 +42,6 @@ public class MybatisPlusLoginDeleteConfig {
         configuration.setJdbcTypeForNull(JdbcType.NULL);
         sqlSessionFactory.setConfiguration(configuration);
         PaginationInterceptor pagination = new PaginationInterceptor();
-        pagination.setDialectType("h2");
         OptimisticLockerInterceptor optLock = new OptimisticLockerInterceptor();
         sqlSessionFactory.setPlugins(new Interceptor[]{
                 pagination,

+ 0 - 1
src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusNoOptLockConfig.java

@@ -39,7 +39,6 @@ public class MybatisPlusNoOptLockConfig {
         configuration.setJdbcTypeForNull(JdbcType.NULL);
         sqlSessionFactory.setConfiguration(configuration);
         PaginationInterceptor pagination = new PaginationInterceptor();
-        pagination.setDialectType("h2");
         sqlSessionFactory.setPlugins(new Interceptor[]{
                 pagination,
         });

+ 0 - 1
src/test/java/com/baomidou/mybatisplus/test/oracle/config/OracleMybatisPlusConfig.java

@@ -40,7 +40,6 @@ public class OracleMybatisPlusConfig {
         configuration.setMapUnderscoreToCamelCase(true);
         sqlSessionFactory.setConfiguration(configuration);
         PaginationInterceptor pagination = new PaginationInterceptor();
-        pagination.setDialectType("oracle");
         sqlSessionFactory.setPlugins(new Interceptor[]{
                 pagination
         });