Commit b19f305d authored by 陈祥烨's avatar 陈祥烨

数据迁移

parent 0d4a2952
...@@ -6,17 +6,13 @@ import com.yeejoin.amos.api.tool.face.service.RelationService; ...@@ -6,17 +6,13 @@ import com.yeejoin.amos.api.tool.face.service.RelationService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType; import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation; import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper; import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel; import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.xml.crypto.Data; import javax.servlet.http.HttpServletResponse;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
@CrossOrigin @CrossOrigin
...@@ -31,29 +27,31 @@ public class RelationResource { ...@@ -31,29 +27,31 @@ public class RelationResource {
/** /**
* 根据机构ID和数据库sequenceNbr批量删除数据库 * 根据机构ID和数据库sequenceNbr批量删除数据库
*
* @param agencyCodeId 机构ID * @param agencyCodeId 机构ID
* @param sequenceNbrs 多个主键 * @param sequenceNbrs 多个主键
* @return String * @return String
*/ */
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false) @TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@DeleteMapping(value = "/relation/{agencyCodeId}/{sequenceNbrs}") @DeleteMapping(value = "/relation/{agencyCodeId}/{sequenceNbrs}")
@ApiOperation(httpMethod = "DELETE", value = "机构删除", notes = "机构删除") @ApiOperation(httpMethod = "DELETE", value = "机构删除", notes = "机构删除")
public ResponseModel<String> deleteDataBase( public ResponseModel<String> deleteDataBase(
@PathVariable Long agencyCodeId, @PathVariable Long agencyCodeId,
@PathVariable String sequenceNbrs) throws Exception { @PathVariable String sequenceNbrs) throws Exception {
relationService.deleteAgency(agencyCodeId,sequenceNbrs); relationService.deleteAgency(agencyCodeId, sequenceNbrs);
return ResponseHelper.buildResponse("The data has been deleted !"); return ResponseHelper.buildResponse("The data has been deleted !");
} }
/** /**
* 导出SQL脚本 * 导出SQL脚本
*
* @return String * @return String
*/ */
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false) @TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@GetMapping(value = "/output/{agencyCodeId}/{sequenceNbrs}") @GetMapping(value = "/output/{agencyCodeId}/{sequenceNbrs}")
@ApiOperation(httpMethod = "GET", value = "导出", notes = "导出") @ApiOperation(httpMethod = "GET", value = "导出", notes = "导出")
public ResponseModel<String> genereteSQL(@PathVariable Long agencyCodeId,@PathVariable String sequenceNbrs) throws Exception { public ResponseModel<String> genereteSQL(@PathVariable Long agencyCodeId, @PathVariable String sequenceNbrs, HttpServletResponse response) throws Exception {
relationService.outputAgency(agencyCodeId, sequenceNbrs); relationService.outputAgency(agencyCodeId, sequenceNbrs,response);
return ResponseHelper.buildResponse("yes"); return ResponseHelper.buildResponse("yes");
} }
} }
package com.yeejoin.amos.api.tool.controller;
import com.yeejoin.amos.api.tool.face.service.TransferDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.sql.SQLException;
@CrossOrigin
@RestController
@Api(tags = "数据迁移")
@RequestMapping(value = "/transfer_data")
public class TransferDataResource {
@Autowired
private TransferDataService transferDataService;
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@PutMapping(value = "/relation/")
@ApiOperation(httpMethod = "Put", value = "数据迁移", notes = "数据迁移")
public ResponseModel<String> transferData( ) throws SQLException, ClassNotFoundException {
transferDataService.transferData();
return ResponseHelper.buildResponse("The data has been transferred !");
}
}
package com.yeejoin.amos.api.tool.face.service; package com.yeejoin.amos.api.tool.face.service;
import com.alibaba.fastjson.JSON;
import com.yeejoin.amos.api.tool.face.model.DataBaseLinkModel; import com.yeejoin.amos.api.tool.face.model.DataBaseLinkModel;
import com.yeejoin.amos.api.tool.face.model.RelationModel; import com.yeejoin.amos.api.tool.face.model.RelationModel;
import com.yeejoin.amos.api.tool.face.model.RelationTreeModel; import com.yeejoin.amos.api.tool.face.model.RelationTreeModel;
import com.yeejoin.amos.api.tool.face.orm.dao.RelationMapper; import com.yeejoin.amos.api.tool.face.orm.dao.RelationMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.Relation; import com.yeejoin.amos.api.tool.face.orm.entity.Relation;
import com.yeejoin.amos.api.tool.face.orm.entity.TableColumn; import com.yeejoin.amos.api.tool.face.orm.entity.TableColumn;
import io.github.classgraph.json.JSONUtils; import com.yeejoin.amos.api.tool.utils.TableUtils;
import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.beanutils.ConvertUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.typroject.tyboot.core.foundation.utils.StringUtil; import org.typroject.tyboot.core.foundation.utils.StringUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
...@@ -28,32 +26,6 @@ import java.util.Map; ...@@ -28,32 +26,6 @@ import java.util.Map;
@Service @Service
public class RelationService extends BaseService<RelationModel, Relation, RelationMapper> { public class RelationService extends BaseService<RelationModel, Relation, RelationMapper> {
/**
* 数据库备份路径
*/
public static final String BACKUP_PATH = "/db/";
/**
* 数据库备份文本前缀
*/
public static String ONESQL_PREFIX = "";
private static String SUFFIX = "sql";
private static String BR = "\r\n";
private static String SLASH = "/";
private static String BRANCH = ";";
private static String SPLIT = "`";
private static String SPACE = " ";
private static String INSERT_INTO = " INSERT INTO ";
private static String CREATE_INTO = " CREATE TABLE ";
private static String VALUES = "VALUES";
private static String LEFTBRACE = "(";
private static String RIGHTBRACE = ")";
private static String QUOTES = "'";
private static String COMMA = ",";
private static String DISABLEFOREIGN = "SET FOREIGN_KEY_CHECKS = 0;\r\n";
private static String ABLEFOREIGN = "SET FOREIGN_KEY_CHECKS = 1;\r\n";
private static String DELIMITER = "###################################";
@Autowired @Autowired
private RelationMapper relationMapper; private RelationMapper relationMapper;
@Autowired @Autowired
...@@ -69,7 +41,7 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati ...@@ -69,7 +41,7 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
* 根据机构删除 * 根据机构删除
*/ */
public void deleteAgency(Long agencyCodeId, String sequenceNbrs) throws Exception { public void deleteAgency(Long agencyCodeId, String sequenceNbrs) throws Exception {
for (Long seq : (Long[]) ConvertUtils.convert(StringUtil.string2Array(sequenceNbrs),Long.class)) { for (Long seq : (Long[]) ConvertUtils.convert(StringUtil.string2Array(sequenceNbrs), Long.class)) {
DataBaseLinkModel model = dataBaseLinkService.queryBySeq(seq); DataBaseLinkModel model = dataBaseLinkService.queryBySeq(seq);
Connection connection = dataBaseLinkService.connectNewDatabase(model); Connection connection = dataBaseLinkService.connectNewDatabase(model);
this.deleteDataBase( this.deleteDataBase(
...@@ -78,6 +50,18 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati ...@@ -78,6 +50,18 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
} }
/** /**
* 导出机构
*/
public void outputAgency(Long agencyCodeId, String sequenceNbrs, HttpServletResponse response) throws Exception {
for (Long seq : (Long[]) ConvertUtils.convert(StringUtil.string2Array(sequenceNbrs), Long.class)) {
DataBaseLinkModel model = dataBaseLinkService.queryBySeq(seq);
Connection connection = dataBaseLinkService.connectNewDatabase(model);
this.insertData(
connection, agencyTreeService.queryForAgencyCodeById(agencyCodeId), model.getDbName());
}
}
/**
* 删除数据库 * 删除数据库
*/ */
public String deleteDataBase(Connection connection, String agencyCode, String dbName) throws SQLException { public String deleteDataBase(Connection connection, String agencyCode, String dbName) throws SQLException {
...@@ -90,8 +74,8 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati ...@@ -90,8 +74,8 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
//根据根节点获得根节点相关列表 //根据根节点获得根节点相关列表
List<RelationTreeModel> array = this.createList(tree); List<RelationTreeModel> array = this.createList(tree);
//根据列表获取sql语句 //根据列表获取sql语句
System.out.println(this.createSqlByArray(array,agencyCode)); System.out.println(this.createSqlByArray(array, agencyCode));
System.out.println(statementSql(this.createSqlByArray(array, agencyCode).toString(),connection)); System.out.println(statementSql(this.createSqlByArray(array, agencyCode).toString(), connection));
} }
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
...@@ -122,7 +106,7 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati ...@@ -122,7 +106,7 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
public List<HashMap<String, String>> queryRelation(String dbName) throws SQLException { public List<HashMap<String, String>> queryRelation(String dbName) throws SQLException {
StringBuilder sql = new StringBuilder("SELECT * FROM "); StringBuilder sql = new StringBuilder("SELECT * FROM ");
sql.append(dbName).append("_relation;"); sql.append(dbName).append("_relation;");
List<HashMap<String,String>> maps = relationMapper.getPublicItems(sql.toString()); List<HashMap<String, String>> maps = relationMapper.getPublicItems(sql.toString());
return maps; return maps;
} }
...@@ -197,15 +181,9 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati ...@@ -197,15 +181,9 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
} }
/** /**
* * 插入数据
* @param connection
* @param agencyCode
* @param dbName
* @return
* @throws SQLException
*/ */
public void insertData(Connection connection, String agencyCode, String dbName) throws SQLException {
public String insertData(Connection connection, String agencyCode, String dbName) throws SQLException {
try { try {
if (!connection.isClosed()) if (!connection.isClosed())
System.out.println("Succeeded connecting to the Database!"); System.out.println("Succeeded connecting to the Database!");
...@@ -215,91 +193,28 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati ...@@ -215,91 +193,28 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
//根据根节点获得根节点相关列表 //根据根节点获得根节点相关列表
List<RelationTreeModel> array = this.createList(tree); List<RelationTreeModel> array = this.createList(tree);
//根据列表获取sql语句 //根据列表获取sql语句
for(RelationTreeModel model: array){ for (RelationTreeModel model : array) {
List<RelationTreeModel> tableSet = tableRelation(model, array); List<RelationTreeModel> tableSet = tableRelation(model, array);
List<String> columNames = this.selectColumNames(model.getName(),connection); List<TableColumn> columns = TableUtils.getTableColumn(model.getName(), connection);
String sql = this.insertSqlByTableName(tableSet , model.getName(), columNames, agencyCode ).toString(); String sql = this.getSelectSQL(tableSet, model.getName(), columns, agencyCode).toString();
List<Map<String, Object>> dataList = TableUtils.getMaps(sql, connection);
System.out.println(sql); System.out.println(sql);
String columnSql = "" + System.out.println(TableUtils.getInsertSQL(dataList, columns, model.getName()));
"\t\t SELECT\n" +
"\t\t table_name as table_name,\n" +
"\t\t\tcolumn_name as columnName,\n" +
"\t\t\t( CASE WHEN ( is_nullable = 'no' && column_key != 'PRI' ) THEN '1' ELSE NULL END ) AS isRequired,\n" +
"\t\t\t( CASE WHEN column_key = 'PRI' THEN '1' ELSE '0' END ) AS isPk,\n" +
"\t\t\tordinal_position AS sort,\n" +
"\t\t\tcolumn_comment as columnComment,\n" +
"\t\t\t( CASE WHEN extra = 'auto_increment' THEN '1' ELSE '0' END ) AS isIncrement,\n" +
"\t\t\tcolumn_type as columnType \n" +
"\t\tFROM\n" +
"\t\t\tinformation_schema.COLUMNS \n" +
"\t\tWHERE\n" +
"\t\t\ttable_schema = database()\n" +
"\t\t\tAND table_name = \"" + model.getName() + "\"\n" +
"\t\tORDER BY\n" +
"\t\t\tordinal_position\t";
List<Map<String, Object>> dataList = this.setToMap(sql,connection);
List<Map<String, Object>> columnList = this.setToMap(columnSql,connection);
List<TableColumn> columns = new ArrayList<>();
for (Map<String,Object> map: columnList){
TableColumn column = JSON.parseObject(JSON.toJSONString(map), TableColumn.class);
columns.add(column);
}
StringBuffer sbsql = new StringBuffer();
for (Map<String, Object> map : dataList) {
sbsql.append(INSERT_INTO);
sbsql.append(SPACE).append(model.getName()).append(SPACE);
sbsql.append(LEFTBRACE);
for (TableColumn column : columns) {
sbsql.append(SPLIT);
sbsql.append(column.getColumnName());
sbsql.append(SPLIT);
sbsql.append(COMMA);
}
sbsql.deleteCharAt(sbsql.length() - 1);
sbsql.append(RIGHTBRACE);
sbsql.append(VALUES);
sbsql.append(LEFTBRACE);
for (TableColumn column : columns) {
if (column.getColumnType().contains("bigint") ||
column.getColumnType().contains("int") ||
column.getColumnType().contains("bit(1)")) {
if (!ObjectUtils.isEmpty(map.get(column.getColumnName()))) {
sbsql.append(map.get(column.getColumnName()));
}else {
sbsql.append("0");
}
} else {
if (!ObjectUtils.isEmpty(map.get(column.getColumnName()))) {
sbsql.append("'").append(map.get(column.getColumnName())).append("'");
} else {
sbsql.append("null");
}
}
sbsql.append(COMMA);
}
sbsql.deleteCharAt(sbsql.length() - 1);
sbsql.append(RIGHTBRACE);
sbsql.append(BRANCH).append(BR);
}
System.out.println(sbsql);
} }
} }
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
connection.close(); connection.close();
return null;
} }
/** /**
* 导出插入语句 * 导出插入语句
* @param array
* @param agencyCode
* @return
*/ */
public StringBuilder insertSqlByTableName( public StringBuilder getSelectSQL(
List<RelationTreeModel> array, List<RelationTreeModel> array,
String tableName, String tableName,
List<String> columNames, List<TableColumn> columns,
String agencyCode) { String agencyCode) {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
if (array.size() == 1) { if (array.size() == 1) {
...@@ -309,12 +224,12 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati ...@@ -309,12 +224,12 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
} else { } else {
sql.append("SELECT "); sql.append("SELECT ");
int count = 0; int count = 0;
for(String name : columNames){ for (TableColumn colum : columns) {
if (count != 0){ if (count != 0) {
sql.append(","); sql.append(",");
} }
count++; count++;
sql.append(tableName).append(".").append(name); sql.append(tableName).append(".").append(colum.getColumnName());
} }
sql.append(" FROM ").append(array.get(0).getName()); sql.append(" FROM ").append(array.get(0).getName());
for (RelationTreeModel model : array) { for (RelationTreeModel model : array) {
...@@ -331,25 +246,6 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati ...@@ -331,25 +246,6 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
} }
/** /**
*
* @param tableName
* @param connection
* @return
* @throws SQLException
*/
public List<String> selectColumNames(String tableName, Connection connection) throws SQLException {
List<String> columNames = new ArrayList<>();
String sql = "SELECT * FROM " + tableName + " limit 0,0";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
ResultSetMetaData data = resultSet.getMetaData();
for(int i = 1 ; i <= data.getColumnCount(); i++ ){
if(!("content").equals(data.getColumnName(i)))
columNames.add(data.getColumnName(i));
}
return columNames;
}
/**
* 列表节点生成(递归) * 列表节点生成(递归)
*/ */
public List<RelationTreeModel> createNodeList(List<RelationTreeModel> tree) { public List<RelationTreeModel> createNodeList(List<RelationTreeModel> tree) {
...@@ -378,17 +274,13 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati ...@@ -378,17 +274,13 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
} }
/** /**
* * 根据表获取关联表集合
* @param table
* @param list
* @return
*/ */
public List<RelationTreeModel> tableRelation(RelationTreeModel table, List<RelationTreeModel> list){ public List<RelationTreeModel> tableRelation(RelationTreeModel table, List<RelationTreeModel> list) {
List<RelationTreeModel> result = new ArrayList<>(); List<RelationTreeModel> result = new ArrayList<>();
if(table.getParentName().equals("")) { if (table.getParentName().equals("")) {
result.add(table); result.add(table);
} } else {
else {
for (RelationTreeModel node : list) { for (RelationTreeModel node : list) {
if (node.getName().equals(table.getParentName())) { if (node.getName().equals(table.getParentName())) {
result.addAll(tableRelation(node, list)); result.addAll(tableRelation(node, list));
...@@ -399,48 +291,8 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati ...@@ -399,48 +291,8 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
} }
return result; return result;
} }
/**
* 获取关系表转化为map
*/
public List<Map<String, Object>> setToMap(String sql, Connection connection) throws SQLException {
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery(sql);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
ResultSetMetaData md = rs.getMetaData();
int columnCount = md.getColumnCount();
while (rs.next()) {
Map<String, Object> rowData = new HashMap<String, Object>();
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), rs.getObject(i));
}
list.add(rowData);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
rs = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
public void outputAgency(Long agencyCodeId, String sequenceNbrs) throws Exception {
for (Long seq : (Long[]) ConvertUtils.convert(StringUtil.string2Array(sequenceNbrs),Long.class)) {
DataBaseLinkModel model = dataBaseLinkService.queryBySeq(seq);
Connection connection = dataBaseLinkService.connectNewDatabase(model);
this.insertData(
connection, agencyTreeService.queryForAgencyCodeById(agencyCodeId), model.getDbName());
}
}
public void download(String filePath ,String sql) throws IOException { public void download(String filePath, String sql) throws IOException {
File file = new File(filePath); File file = new File(filePath);
try { try {
FileWriter writer = new FileWriter(file); FileWriter writer = new FileWriter(file);
......
package com.yeejoin.amos.api.tool.face.service;
import com.yeejoin.amos.api.tool.face.orm.entity.TableColumn;
import com.yeejoin.amos.api.tool.utils.TableUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class TransferDataService {
private static String TABLE_DES = "mcb_warning_base_source_attribution";
private static String TABLE_ORI = "qms_explorer";
private static String DBNAME_DES = "amos_mcb";
private static String DBNAME_ORI = "amos_studio";
public Connection connectDataBase(String dataBaseName) throws ClassNotFoundException, SQLException {
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 生成url
String dbUrl = "jdbc:mysql://172.16.3.18:3306/" + dataBaseName;
// 连接数据库
return DriverManager.getConnection(dbUrl, "root", "Yeejoin@2020");
}
public void transferData() throws SQLException, ClassNotFoundException {
Connection connection = this.connectDataBase(DBNAME_ORI);
List<Map<String,Object>> maps = TableUtils.getMaps("SELECT * FROM " + TABLE_ORI + " ;" , connection);
connection.close();
connection = this.connectDataBase(DBNAME_DES);
List<TableColumn> columns = TableUtils.getTableColumn(TABLE_DES,connection);
List<Map<String,Object>> dataList = this.convertDataMap(maps, columns);
System.out.println(TableUtils.getInsertSQL(dataList,columns,TABLE_DES));
}
public List<Map<String, Object>> convertDataMap(List<Map<String, Object>> maps, List<TableColumn> columns) {
List<Map<String, Object>> dataList = new ArrayList<>();
for (Map<String, Object> map : maps) {
Map<String, Object> data = new HashMap<>();
for (TableColumn column : columns) {
data.put(column.getColumnName(), null);
}
data.replace("SEQUENCE_NBR", map.get("SEQUENCE_NBR"));
data.replace("NAME", map.get("RESOURCE_NAME"));
data.replace("PARENT_ID", map.get("PARENT_ID"));
data.replace("CODE", map.get("AGENCY_CODE"));
data.replace("REC_USER_ID", map.get("REC_USER_ID"));
data.replace("REC_DATE", map.get("REC_DATE"));
dataList.add(data);
}
return dataList;
}
}
package com.yeejoin.amos.api.tool.utils;
import com.alibaba.fastjson.JSON;
import com.yeejoin.amos.api.tool.face.orm.entity.TableColumn;
import org.springframework.util.ObjectUtils;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TableUtils {
/**
* 数据库备份路径
*/
public static final String BACKUP_PATH = "/db/";
/**
* 数据库备份文本前缀
*/
public static String ONESQL_PREFIX = "";
private static String SUFFIX = "sql";
private static String BR = "\r\n";
private static String SLASH = "/";
private static String BRANCH = ";";
private static String SPLIT = "`";
private static String SPACE = " ";
private static String INSERT_INTO = " INSERT INTO ";
private static String CREATE_INTO = " CREATE TABLE ";
private static String VALUES = "VALUES";
private static String LEFTBRACE = "(";
private static String RIGHTBRACE = ")";
private static String QUOTES = "'";
private static String COMMA = ",";
private static String DISABLEFOREIGN = "SET FOREIGN_KEY_CHECKS = 0;\r\n";
private static String ABLEFOREIGN = "SET FOREIGN_KEY_CHECKS = 1;\r\n";
private static String DELIMITER = "###################################";
/**
* 获取maps
*/
public static List<Map<String, Object>> getMaps(String sql, Connection connection) throws SQLException {
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery(sql);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
ResultSetMetaData md = rs.getMetaData();
int columnCount = md.getColumnCount();
while (rs.next()) {
Map<String, Object> rowData = new HashMap<String, Object>();
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), rs.getObject(i));
}
list.add(rowData);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
rs = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
/**
* 获取表单列名
*/
public static List<TableColumn> getTableColumn(String tableName, Connection connection) throws SQLException {
String columnSql = "" +
"\t\t SELECT\n" +
"\t\t table_name as table_name,\n" +
"\t\t\tcolumn_name as columnName,\n" +
"\t\t\t( CASE WHEN ( is_nullable = 'no' && column_key != 'PRI' ) THEN '1' ELSE NULL END ) AS isRequired,\n" +
"\t\t\t( CASE WHEN column_key = 'PRI' THEN '1' ELSE '0' END ) AS isPk,\n" +
"\t\t\tordinal_position AS sort,\n" +
"\t\t\tcolumn_comment as columnComment,\n" +
"\t\t\t( CASE WHEN extra = 'auto_increment' THEN '1' ELSE '0' END ) AS isIncrement,\n" +
"\t\t\tcolumn_type as columnType \n" +
"\t\tFROM\n" +
"\t\t\tinformation_schema.COLUMNS \n" +
"\t\tWHERE\n" +
"\t\t\ttable_schema = database()\n" +
"\t\t\tAND table_name = \"" + tableName + "\"\n" +
"\t\tORDER BY\n" +
"\t\t\tordinal_position\t";
List<Map<String, Object>> columnList = TableUtils.getMaps(columnSql, connection);
List<TableColumn> columns = new ArrayList<>();
for (Map<String, Object> map : columnList) {
TableColumn column = JSON.parseObject(JSON.toJSONString(map), TableColumn.class);
columns.add(column);
}
return columns;
}
/**
* 获取insert语句
*/
public static StringBuffer getInsertSQL(List<Map<String, Object>> dataList, List<TableColumn> columns, String tableName) {
StringBuffer sql = new StringBuffer();
for (Map<String, Object> map : dataList) {
sql.append(INSERT_INTO);
sql.append(SPACE).append(tableName).append(SPACE);
sql.append(LEFTBRACE);
for (TableColumn column : columns) {
sql.append(SPLIT);
sql.append(column.getColumnName());
sql.append(SPLIT);
sql.append(COMMA);
}
sql.deleteCharAt(sql.length() - 1);
sql.append(RIGHTBRACE);
sql.append(VALUES);
sql.append(LEFTBRACE);
for (TableColumn column : columns) {
if (column.getColumnType().contains("bigint") ||
column.getColumnType().contains("int") ||
column.getColumnType().contains("bit(1)")) {
if (!ObjectUtils.isEmpty(map.get(column.getColumnName()))) {
sql.append(map.get(column.getColumnName()));
} else {
sql.append("0");
}
} else {
if (!ObjectUtils.isEmpty(map.get(column.getColumnName()))) {
sql.append("'").append(map.get(column.getColumnName())).append("'");
} else {
sql.append("null");
}
}
sql.append(COMMA);
}
sql.deleteCharAt(sql.length() - 1);
sql.append(RIGHTBRACE);
sql.append(BRANCH).append(BR);
}
return sql;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment