AE86 пре 5 година
родитељ
комит
7c226d6c8d

+ 4 - 0
dbsyncer-common/src/main/java/org/dbsyncer/common/task/Result.java

@@ -12,6 +12,10 @@ public class Result {
 
 
     private String error;
     private String error;
 
 
+    public Result(List<Map<String, Object>> data) {
+        this.data = data;
+    }
+
     public List<Map<String, Object>> getData() {
     public List<Map<String, Object>> getData() {
         return data;
         return data;
     }
     }

+ 30 - 10
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/AbstractDatabaseConnector.java

@@ -94,7 +94,7 @@ public abstract class AbstractDatabaseConnector implements Database {
         // 获取查询SQL
         // 获取查询SQL
         Table table = commandConfig.getTable();
         Table table = commandConfig.getTable();
         String type = SqlBuilderEnum.QUERY.getName();
         String type = SqlBuilderEnum.QUERY.getName();
-        String querySql = getQuerySql(type, table, queryFilterSql);
+        String querySql = buildSql(type, table, queryFilterSql);
         Map<String, String> map = new HashMap<>();
         Map<String, String> map = new HashMap<>();
         map.put(type, querySql);
         map.put(type, querySql);
         return map;
         return map;
@@ -107,23 +107,43 @@ public abstract class AbstractDatabaseConnector implements Database {
         Table table = commandConfig.getTable();
         Table table = commandConfig.getTable();
 
 
         String insert = SqlBuilderEnum.INSERT.getName();
         String insert = SqlBuilderEnum.INSERT.getName();
-        map.put(insert, getQuerySql(insert, table, null));
+        map.put(insert, buildSql(insert, table, null));
 
 
         String update = SqlBuilderEnum.UPDATE.getName();
         String update = SqlBuilderEnum.UPDATE.getName();
-        map.put(update, getQuerySql(update, table, null));
+        map.put(update, buildSql(update, table, null));
 
 
         String delete = SqlBuilderEnum.DELETE.getName();
         String delete = SqlBuilderEnum.DELETE.getName();
-        map.put(delete, getQuerySql(delete, table, null));
+        map.put(delete, buildSql(delete, table, null));
         return map;
         return map;
     }
     }
 
 
     @Override
     @Override
     public Result reader(ConnectorConfig config, Map<String, String> command, int pageIndex, int pageSize) {
     public Result reader(ConnectorConfig config, Map<String, String> command, int pageIndex, int pageSize) {
-        // TODO 实现读取
-        // 1、获取连接
-        // 2、获取select SQL
-        // 3、设置参数
-        return null;
+        // 1、获取select SQL
+        String querySql = command.get(SqlBuilderEnum.QUERY.getName());
+        Assert.hasText(querySql, "查询语句不能为空.");
+
+        DatabaseConfig cfg = (DatabaseConfig) config;
+        JdbcTemplate jdbcTemplate = null;
+        try {
+            // 2、获取连接
+            jdbcTemplate = getJdbcTemplate(cfg);
+
+            // 3、设置参数
+            Object[] args = getPageArgs(pageIndex, pageSize);
+
+            // 4、执行SQL
+            List<Map<String, Object>> list = jdbcTemplate.queryForList(querySql, args);
+
+            // 5、返回结果集
+            return new Result(list);
+        } catch (Exception e) {
+            logger.error(e.getMessage());
+            throw new ConnectorException(e.getMessage());
+        } finally {
+            // 释放连接
+            this.close(jdbcTemplate);
+        }
     }
     }
 
 
     @Override
     @Override
@@ -193,7 +213,7 @@ public abstract class AbstractDatabaseConnector implements Database {
      * @param queryFilterSQL
      * @param queryFilterSQL
      * @return
      * @return
      */
      */
-    private String getQuerySql(String type, Table table, String queryFilterSQL) {
+    private String buildSql(String type, Table table, String queryFilterSQL) {
         if (null == table) {
         if (null == table) {
             logger.error("Table can not be null.");
             logger.error("Table can not be null.");
             throw new ConnectorException("Table can not be null.");
             throw new ConnectorException("Table can not be null.");

+ 18 - 2
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/Database.java

@@ -6,10 +6,26 @@ import org.springframework.jdbc.core.JdbcTemplate;
 
 
 public interface Database extends Connector {
 public interface Database extends Connector {
 
 
-    String getPageSql(String tableName, String pk, String querySQL);
-
     JdbcTemplate getJdbcTemplate(DatabaseConfig config);
     JdbcTemplate getJdbcTemplate(DatabaseConfig config);
 
 
     void close(JdbcTemplate jdbcTemplate);
     void close(JdbcTemplate jdbcTemplate);
 
 
+    /**
+     * 获取分页SQL
+     *
+     * @param tableName
+     * @param pk
+     * @param querySQL
+     * @return
+     */
+    String getPageSql(String tableName, String pk, String querySQL);
+
+    /**
+     * 获取分页参数
+     *
+     * @param pageIndex
+     * @param pageSize
+     * @return
+     */
+    Object[] getPageArgs(int pageIndex, int pageSize);
 }
 }

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

@@ -17,4 +17,9 @@ public final class MysqlConnector extends AbstractDatabaseConnector {
         return querySQL + DatabaseConstant.MYSQL_PAGE_SQL;
         return querySQL + DatabaseConstant.MYSQL_PAGE_SQL;
     }
     }
 
 
+    @Override
+    public Object[] getPageArgs(int pageIndex, int pageSize) {
+        return new Object[]{(pageIndex - 1) * pageSize, pageSize};
+    }
+
 }
 }

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

@@ -17,4 +17,9 @@ public final class OracleConnector extends AbstractDatabaseConnector {
         return DatabaseConstant.ORACLE_PAGE_SQL_START + querySQL + DatabaseConstant.ORACLE_PAGE_SQL_END;
         return DatabaseConstant.ORACLE_PAGE_SQL_START + querySQL + DatabaseConstant.ORACLE_PAGE_SQL_END;
     }
     }
 
 
+    @Override
+    public Object[] getPageArgs(int pageIndex, int pageSize) {
+        return new Object[]{pageIndex * pageSize, (pageIndex - 1) * pageSize};
+    }
+
 }
 }

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

@@ -6,7 +6,6 @@ import org.dbsyncer.connector.config.MetaInfo;
 import org.dbsyncer.connector.constant.DatabaseConstant;
 import org.dbsyncer.connector.constant.DatabaseConstant;
 import org.dbsyncer.connector.database.AbstractDatabaseConnector;
 import org.dbsyncer.connector.database.AbstractDatabaseConnector;
 
 
-import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 
 
 public final class DQLMysqlConnector extends AbstractDatabaseConnector {
 public final class DQLMysqlConnector extends AbstractDatabaseConnector {
@@ -22,6 +21,11 @@ public final class DQLMysqlConnector extends AbstractDatabaseConnector {
         return querySQL + DatabaseConstant.MYSQL_PAGE_SQL;
         return querySQL + DatabaseConstant.MYSQL_PAGE_SQL;
     }
     }
 
 
+    @Override
+    public Object[] getPageArgs(int pageIndex, int pageSize) {
+        return new Object[]{(pageIndex - 1) * pageSize, pageSize};
+    }
+
     @Override
     @Override
     public List<String> getTable(ConnectorConfig config) {
     public List<String> getTable(ConnectorConfig config) {
         return super.getDqlTable(config);
         return super.getDqlTable(config);

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

@@ -6,7 +6,6 @@ import org.dbsyncer.connector.config.MetaInfo;
 import org.dbsyncer.connector.constant.DatabaseConstant;
 import org.dbsyncer.connector.constant.DatabaseConstant;
 import org.dbsyncer.connector.database.AbstractDatabaseConnector;
 import org.dbsyncer.connector.database.AbstractDatabaseConnector;
 
 
-import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 
 
 public final class DQLOracleConnector extends AbstractDatabaseConnector {
 public final class DQLOracleConnector extends AbstractDatabaseConnector {
@@ -22,6 +21,11 @@ public final class DQLOracleConnector extends AbstractDatabaseConnector {
         return DatabaseConstant.ORACLE_PAGE_SQL_START + querySQL + DatabaseConstant.ORACLE_PAGE_SQL_END;
         return DatabaseConstant.ORACLE_PAGE_SQL_START + querySQL + DatabaseConstant.ORACLE_PAGE_SQL_END;
     }
     }
 
 
+    @Override
+    public Object[] getPageArgs(int pageIndex, int pageSize) {
+        return new Object[]{pageIndex * pageSize, (pageIndex - 1) * pageSize};
+    }
+
     @Override
     @Override
     public List<String> getTable(ConnectorConfig config) {
     public List<String> getTable(ConnectorConfig config) {
         return super.getDqlTable(config);
         return super.getDqlTable(config);

+ 5 - 1
dbsyncer-connector/src/main/java/org/dbsyncer/connector/sqlserver/SqlServerConnector.java

@@ -23,9 +23,13 @@ public final class SqlServerConnector extends AbstractDatabaseConnector implemen
             throw new ConnectorException("Table primary key can not be empty.");
             throw new ConnectorException("Table primary key can not be empty.");
         }
         }
         // SqlServer 分页查询
         // SqlServer 分页查询
-        // sql> SELECT * FROM SD_USER
         // sql> SELECT * FROM SD_USER ORDER BY USER.ID OFFSET(3-1) * 1000 ROWS FETCH NEXT 1000 ROWS ONLY
         // sql> SELECT * FROM SD_USER ORDER BY USER.ID OFFSET(3-1) * 1000 ROWS FETCH NEXT 1000 ROWS ONLY
         return new StringBuilder(querySQL).append(" ORDER BY ").append(tableName).append(".").append(pk).append(" OFFSET(?-1) * ? ROWS FETCH NEXT ? ROWS ONLY").toString();
         return new StringBuilder(querySQL).append(" ORDER BY ").append(tableName).append(".").append(pk).append(" OFFSET(?-1) * ? ROWS FETCH NEXT ? ROWS ONLY").toString();
     }
     }
 
 
+    @Override
+    public Object[] getPageArgs(int pageIndex, int pageSize) {
+        return new Object[]{(pageIndex - 1) * pageSize, pageSize};
+    }
+
 }
 }