AE86 3 年 前
コミット
54c6afdc12

+ 0 - 21
dbsyncer-connector/src/main/java/org/dbsyncer/connector/config/PageArgConfig.java

@@ -1,21 +0,0 @@
-package org.dbsyncer.connector.config;
-
-public class PageArgConfig {
-
-    private String querySql;
-
-    private Object[] args;
-
-    public PageArgConfig(String querySql, Object[] args) {
-        this.querySql = querySql;
-        this.args = args;
-    }
-
-    public String getQuerySql() {
-        return querySql;
-    }
-
-    public Object[] getArgs() {
-        return args;
-    }
-}

+ 0 - 21
dbsyncer-connector/src/main/java/org/dbsyncer/connector/config/PageSqlBuilderConfig.java

@@ -1,21 +0,0 @@
-package org.dbsyncer.connector.config;
-
-public class PageSqlBuilderConfig {
-
-    private String querySql;
-
-    private SqlBuilderConfig config;
-
-    public PageSqlBuilderConfig(SqlBuilderConfig config, String querySql) {
-        this.config = config;
-        this.querySql = querySql;
-    }
-
-    public SqlBuilderConfig getConfig() {
-        return config;
-    }
-
-    public String getQuerySql() {
-        return querySql;
-    }
-}

+ 21 - 0
dbsyncer-connector/src/main/java/org/dbsyncer/connector/config/PageSqlConfig.java

@@ -0,0 +1,21 @@
+package org.dbsyncer.connector.config;
+
+public class PageSqlConfig {
+
+    private String querySql;
+
+    private String pk;
+
+    public PageSqlConfig(String querySql, String pk) {
+        this.querySql = querySql;
+        this.pk = pk;
+    }
+
+    public String getQuerySql() {
+        return querySql;
+    }
+
+    public String getPk() {
+        return pk;
+    }
+}

+ 6 - 20
dbsyncer-connector/src/main/java/org/dbsyncer/connector/constant/DatabaseConstant.java

@@ -21,27 +21,13 @@ public class DatabaseConstant {
 
 
     //*********************************** SqlServer **************************************//
     //*********************************** SqlServer **************************************//
     /**
     /**
-     * SqlServer分页语句
-     *
-     * <pre>select w.* from my_org a,
-     * (
-     *     select top 4 t.* from
-     * 		(
-     * 			select top 10 s.* from my_org s order by id
-     * 		) t
-     * ) w where a.id = w.id order by a.id
+     * SqlServer分页语句(2008版本支持)
+     * <pre>
+     *  select * from (
+     *      select row_number() over(order by id) as sqlserver_row_id, * from (select * from my_user) s
+     *  ) as a where a.sqlserver_row_id between 1 and 10
      * </pre>
      * </pre>
      */
      */
-    public static final String SQLSERVER_PAGE_SQL = "SELECT W.* FROM %s A, (SELECT TOP ? T.* FROM (SELECT TOP ? S.* FROM %s S ORDER BY %s) T) W WHERE A.%s = W.%s ORDER BY A.%s";
-
-    /**
-     * SqlServer分页语句开始(2012版本支持)
-     */
-    public static final String SQLSERVER_PAGE_SQL_START = " ORDER BY ";
-
-    /**
-     * SqlServer分页语句结束(2012版本支持)
-     */
-    public static final String SQLSERVER_PAGE_SQL_END = " OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
+    public static final String SQLSERVER_PAGE_SQL = "SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY %s) AS SQLSERVER_ROW_ID, * FROM (%s) S) A WHERE A.SQLSERVER_ROW_ID BETWEEN ? AND ?";
 
 
 }
 }

+ 3 - 6
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/AbstractDatabaseConnector.java

@@ -168,11 +168,10 @@ public abstract class AbstractDatabaseConnector implements Database {
             jdbcTemplate = getJdbcTemplate(cfg);
             jdbcTemplate = getJdbcTemplate(cfg);
 
 
             // 3、设置参数
             // 3、设置参数
-            PageArgConfig pageArgConfig = prepareSetArgs(querySql, config.getPageIndex(), config.getPageSize());
-            Collections.addAll(config.getArgs(), pageArgConfig.getArgs());
+            Collections.addAll(config.getArgs(), getPageArgs(config.getPageIndex(), config.getPageSize()));
 
 
             // 4、执行SQL
             // 4、执行SQL
-            List<Map<String, Object>> list = jdbcTemplate.queryForList(pageArgConfig.getQuerySql(), config.getArgs().toArray());
+            List<Map<String, Object>> list = jdbcTemplate.queryForList(querySql, config.getArgs().toArray());
 
 
             // 5、返回结果集
             // 5、返回结果集
             return new Result(new ArrayList<>(list));
             return new Result(new ArrayList<>(list));
@@ -382,9 +381,7 @@ public abstract class AbstractDatabaseConnector implements Database {
         }
         }
         String quotation = buildSqlWithQuotation();
         String quotation = buildSqlWithQuotation();
         String pk = DatabaseUtil.findTablePrimaryKey(commandConfig.getOriginalTable(), quotation);
         String pk = DatabaseUtil.findTablePrimaryKey(commandConfig.getOriginalTable(), quotation);
-        SqlBuilderConfig sqlBuilderConfig = new SqlBuilderConfig(table.getName(), pk);
-        PageSqlBuilderConfig config = new PageSqlBuilderConfig(sqlBuilderConfig, querySql);
-        map.put(SqlBuilderEnum.QUERY.getName(), getPageSql(config));
+        map.put(SqlBuilderEnum.QUERY.getName(), getPageSql(new PageSqlConfig(querySql, pk)));
 
 
         // 获取查询总数SQL
         // 获取查询总数SQL
         StringBuilder queryCount = new StringBuilder();
         StringBuilder queryCount = new StringBuilder();

+ 4 - 6
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/Database.java

@@ -2,8 +2,7 @@ package org.dbsyncer.connector.database;
 
 
 import org.dbsyncer.connector.Connector;
 import org.dbsyncer.connector.Connector;
 import org.dbsyncer.connector.config.DatabaseConfig;
 import org.dbsyncer.connector.config.DatabaseConfig;
-import org.dbsyncer.connector.config.PageArgConfig;
-import org.dbsyncer.connector.config.PageSqlBuilderConfig;
+import org.dbsyncer.connector.config.PageSqlConfig;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.JdbcTemplate;
 
 
 public interface Database extends Connector {
 public interface Database extends Connector {
@@ -18,16 +17,15 @@ public interface Database extends Connector {
      * @param config
      * @param config
      * @return
      * @return
      */
      */
-    String getPageSql(PageSqlBuilderConfig config);
+    String getPageSql(PageSqlConfig config);
 
 
     /**
     /**
-     * 预设置分页参数
+     * 获取分页SQL
      *
      *
-     * @param sql
      * @param pageIndex
      * @param pageIndex
      * @param pageSize
      * @param pageSize
      * @return
      * @return
      */
      */
-    PageArgConfig prepareSetArgs(String sql, int pageIndex, int pageSize);
+    Object[] getPageArgs(int pageIndex, int pageSize);
 
 
 }
 }

+ 2 - 2
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/sqlbuilder/SqlBuilderQuery.java

@@ -2,7 +2,7 @@ package org.dbsyncer.connector.database.sqlbuilder;
 
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.StringUtils;
 import org.dbsyncer.connector.config.Field;
 import org.dbsyncer.connector.config.Field;
-import org.dbsyncer.connector.config.PageSqlBuilderConfig;
+import org.dbsyncer.connector.config.PageSqlConfig;
 import org.dbsyncer.connector.config.SqlBuilderConfig;
 import org.dbsyncer.connector.config.SqlBuilderConfig;
 import org.dbsyncer.connector.database.AbstractSqlBuilder;
 import org.dbsyncer.connector.database.AbstractSqlBuilder;
 import org.dbsyncer.connector.database.Database;
 import org.dbsyncer.connector.database.Database;
@@ -20,7 +20,7 @@ public class SqlBuilderQuery extends AbstractSqlBuilder {
     public String buildSql(SqlBuilderConfig config) {
     public String buildSql(SqlBuilderConfig config) {
         // 分页语句
         // 分页语句
         Database database = config.getDatabase();
         Database database = config.getDatabase();
-        return database.getPageSql(new PageSqlBuilderConfig(config, buildQuerySql(config)));
+        return database.getPageSql(new PageSqlConfig(buildQuerySql(config), config.getPk()));
     }
     }
 
 
     @Override
     @Override

+ 4 - 5
dbsyncer-connector/src/main/java/org/dbsyncer/connector/mysql/MysqlConnector.java

@@ -1,8 +1,7 @@
 package org.dbsyncer.connector.mysql;
 package org.dbsyncer.connector.mysql;
 
 
 import org.dbsyncer.connector.config.DatabaseConfig;
 import org.dbsyncer.connector.config.DatabaseConfig;
-import org.dbsyncer.connector.config.PageArgConfig;
-import org.dbsyncer.connector.config.PageSqlBuilderConfig;
+import org.dbsyncer.connector.config.PageSqlConfig;
 import org.dbsyncer.connector.constant.DatabaseConstant;
 import org.dbsyncer.connector.constant.DatabaseConstant;
 import org.dbsyncer.connector.database.AbstractDatabaseConnector;
 import org.dbsyncer.connector.database.AbstractDatabaseConnector;
 
 
@@ -14,13 +13,13 @@ public final class MysqlConnector extends AbstractDatabaseConnector {
     }
     }
 
 
     @Override
     @Override
-    public String getPageSql(PageSqlBuilderConfig config) {
+    public String getPageSql(PageSqlConfig config) {
         return config.getQuerySql() + DatabaseConstant.MYSQL_PAGE_SQL;
         return config.getQuerySql() + DatabaseConstant.MYSQL_PAGE_SQL;
     }
     }
 
 
     @Override
     @Override
-    public PageArgConfig prepareSetArgs(String sql, int pageIndex, int pageSize) {
-        return new PageArgConfig(sql, new Object[] {(pageIndex - 1) * pageSize, pageSize});
+    public Object[] getPageArgs(int pageIndex, int pageSize) {
+        return new Object[]{(pageIndex - 1) * pageSize, pageSize};
     }
     }
 
 
 }
 }

+ 4 - 5
dbsyncer-connector/src/main/java/org/dbsyncer/connector/oracle/OracleConnector.java

@@ -1,8 +1,7 @@
 package org.dbsyncer.connector.oracle;
 package org.dbsyncer.connector.oracle;
 
 
 import org.dbsyncer.connector.config.DatabaseConfig;
 import org.dbsyncer.connector.config.DatabaseConfig;
-import org.dbsyncer.connector.config.PageArgConfig;
-import org.dbsyncer.connector.config.PageSqlBuilderConfig;
+import org.dbsyncer.connector.config.PageSqlConfig;
 import org.dbsyncer.connector.constant.DatabaseConstant;
 import org.dbsyncer.connector.constant.DatabaseConstant;
 import org.dbsyncer.connector.database.AbstractDatabaseConnector;
 import org.dbsyncer.connector.database.AbstractDatabaseConnector;
 
 
@@ -14,13 +13,13 @@ public final class OracleConnector extends AbstractDatabaseConnector {
     }
     }
 
 
     @Override
     @Override
-    public String getPageSql(PageSqlBuilderConfig config) {
+    public String getPageSql(PageSqlConfig config) {
         return DatabaseConstant.ORACLE_PAGE_SQL_START + config.getQuerySql() + DatabaseConstant.ORACLE_PAGE_SQL_END;
         return DatabaseConstant.ORACLE_PAGE_SQL_START + config.getQuerySql() + DatabaseConstant.ORACLE_PAGE_SQL_END;
     }
     }
 
 
     @Override
     @Override
-    public PageArgConfig prepareSetArgs(String sql, int pageIndex, int pageSize) {
-        return new PageArgConfig(sql, new Object[] {pageIndex * pageSize, (pageIndex - 1) * pageSize});
+    public Object[] getPageArgs(int pageIndex, int pageSize) {
+        return new Object[]{pageIndex * pageSize, (pageIndex - 1) * pageSize};
     }
     }
 
 
     @Override
     @Override

+ 3 - 3
dbsyncer-connector/src/main/java/org/dbsyncer/connector/sql/DQLMysqlConnector.java

@@ -15,13 +15,13 @@ public final class DQLMysqlConnector extends AbstractDatabaseConnector {
     }
     }
 
 
     @Override
     @Override
-    public String getPageSql(PageSqlBuilderConfig config) {
+    public String getPageSql(PageSqlConfig config) {
         return config.getQuerySql() + DatabaseConstant.MYSQL_PAGE_SQL;
         return config.getQuerySql() + DatabaseConstant.MYSQL_PAGE_SQL;
     }
     }
 
 
     @Override
     @Override
-    public PageArgConfig prepareSetArgs(String sql, int pageIndex, int pageSize) {
-        return new PageArgConfig(sql, new Object[] {(pageIndex - 1) * pageSize, pageSize});
+    public Object[] getPageArgs(int pageIndex, int pageSize) {
+        return new Object[]{(pageIndex - 1) * pageSize, pageSize};
     }
     }
 
 
     @Override
     @Override

+ 3 - 3
dbsyncer-connector/src/main/java/org/dbsyncer/connector/sql/DQLOracleConnector.java

@@ -15,13 +15,13 @@ public final class DQLOracleConnector extends AbstractDatabaseConnector {
     }
     }
 
 
     @Override
     @Override
-    public String getPageSql(PageSqlBuilderConfig config) {
+    public String getPageSql(PageSqlConfig config) {
         return DatabaseConstant.ORACLE_PAGE_SQL_START + config.getQuerySql() + DatabaseConstant.ORACLE_PAGE_SQL_END;
         return DatabaseConstant.ORACLE_PAGE_SQL_START + config.getQuerySql() + DatabaseConstant.ORACLE_PAGE_SQL_END;
     }
     }
 
 
     @Override
     @Override
-    public PageArgConfig prepareSetArgs(String sql, int pageIndex, int pageSize) {
-        return new PageArgConfig(sql, new Object[] {pageIndex * pageSize, (pageIndex - 1) * pageSize});
+    public Object[] getPageArgs(int pageIndex, int pageSize) {
+        return new Object[] {pageIndex * pageSize, (pageIndex - 1) * pageSize};
     }
     }
 
 
     @Override
     @Override

+ 7 - 11
dbsyncer-connector/src/main/java/org/dbsyncer/connector/sql/DQLSqlServerConnector.java

@@ -21,21 +21,17 @@ public final class DQLSqlServerConnector extends AbstractDatabaseConnector {
     }
     }
 
 
     @Override
     @Override
-    public String getPageSql(PageSqlBuilderConfig config) {
-        String pk = config.getConfig().getPk();
-        String tableName = config.getConfig().getTableName();
-        if (StringUtils.isBlank(pk) || StringUtils.isBlank(tableName)) {
-            logger.error("Table primary key and name can not be empty.");
-            throw new ConnectorException("Table primary key and name can not be empty.");
+    public String getPageSql(PageSqlConfig config) {
+        if (StringUtils.isBlank(config.getPk())) {
+            logger.error("Table primary key can not be empty.");
+            throw new ConnectorException("Table primary key can not be empty.");
         }
         }
-        return String.format(DatabaseConstant.SQLSERVER_PAGE_SQL, tableName, tableName, pk, pk, pk, pk);
+        return String.format(DatabaseConstant.SQLSERVER_PAGE_SQL, config.getPk(), config.getQuerySql());
     }
     }
 
 
     @Override
     @Override
-    public PageArgConfig prepareSetArgs(String sql, int pageIndex, int pageSize) {
-        sql = sql.replaceFirst("\\?", String.valueOf(pageSize));
-        sql = sql.replaceFirst("\\?", String.valueOf((pageIndex - 1) * pageSize + 1));
-        return new PageArgConfig(sql, new Object[] {});
+    public Object[] getPageArgs(int pageIndex, int pageSize) {
+        return new Object[]{(pageIndex - 1) * pageSize + 1, pageIndex * pageSize};
     }
     }
 
 
     @Override
     @Override

+ 11 - 13
dbsyncer-connector/src/main/java/org/dbsyncer/connector/sqlserver/SqlServerConnector.java

@@ -2,7 +2,10 @@ package org.dbsyncer.connector.sqlserver;
 
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.StringUtils;
 import org.dbsyncer.connector.ConnectorException;
 import org.dbsyncer.connector.ConnectorException;
-import org.dbsyncer.connector.config.*;
+import org.dbsyncer.connector.config.CommandConfig;
+import org.dbsyncer.connector.config.DatabaseConfig;
+import org.dbsyncer.connector.config.PageSqlConfig;
+import org.dbsyncer.connector.config.Table;
 import org.dbsyncer.connector.constant.ConnectorConstant;
 import org.dbsyncer.connector.constant.ConnectorConstant;
 import org.dbsyncer.connector.constant.DatabaseConstant;
 import org.dbsyncer.connector.constant.DatabaseConstant;
 import org.dbsyncer.connector.database.AbstractDatabaseConnector;
 import org.dbsyncer.connector.database.AbstractDatabaseConnector;
@@ -22,22 +25,17 @@ public final class SqlServerConnector extends AbstractDatabaseConnector implemen
     }
     }
 
 
     @Override
     @Override
-    public String getPageSql(PageSqlBuilderConfig config) {
-        String pk = config.getConfig().getPk();
-        String tableName = config.getConfig().getTableName();
-        if (StringUtils.isBlank(pk) || StringUtils.isBlank(tableName)) {
-            logger.error("Table primary key and name can not be empty.");
-            throw new ConnectorException("Table primary key and name can not be empty.");
+    public String getPageSql(PageSqlConfig config) {
+        if (StringUtils.isBlank(config.getPk())) {
+            logger.error("Table primary key can not be empty.");
+            throw new ConnectorException("Table primary key can not be empty.");
         }
         }
-        return String.format(DatabaseConstant.SQLSERVER_PAGE_SQL, tableName, tableName, pk, pk, pk, pk);
+        return String.format(DatabaseConstant.SQLSERVER_PAGE_SQL, config.getPk(), config.getQuerySql());
     }
     }
 
 
     @Override
     @Override
-    public PageArgConfig prepareSetArgs(String sql, int pageIndex, int pageSize) {
-        // FIXME 分页有问题
-        sql = sql.replaceFirst("\\?", String.valueOf(pageSize));
-        sql = sql.replaceFirst("\\?", String.valueOf((pageIndex - 1) * pageSize + 1));
-        return new PageArgConfig(sql, new Object[] {});
+    public Object[] getPageArgs(int pageIndex, int pageSize) {
+        return new Object[]{(pageIndex - 1) * pageSize + 1, pageIndex * pageSize};
     }
     }
 
 
     @Override
     @Override