Ver Fonte

修改表结构添加事务

xuezizhuo há 1 ano atrás
pai
commit
8e38477f3d

+ 10 - 0
zkqy-datamodeling/src/main/java/com/zkqy/datamodeling/mapper/TableInfoMapper.java

@@ -9,6 +9,11 @@ import java.util.Map;
 
 public interface TableInfoMapper {
 
+    /**
+     * 执行创建表sql语句
+     */
+    void executeCreateTableSql(String createTableSql);
+
     //---------------------------------mysql------------------------------------------
 
     /**
@@ -69,6 +74,11 @@ public interface TableInfoMapper {
      */
     List<TableInfo> mysqlTableFieldInfo(@Param("dataBaseName") String dataBaseName, @Param("tableName") String tableName);
 
+    /**
+     * 备份表sql
+     */
+    Map<String,String> backupTableSql(@Param("dataBaseName") String dataBaseName, @Param("tableName") String tableName);
+
     //---------------------------------sqlServer------------------------------------------
 
     /**

+ 6 - 11
zkqy-datamodeling/src/main/java/com/zkqy/datamodeling/service/impl/TableInfoServiceImpl.java

@@ -251,7 +251,7 @@ public class TableInfoServiceImpl implements ITableInfoService {
 
     @Override
     public AjaxResult updateTable(Map<String, Object> map) {
-        String dataBaseName = (String) map.get("dataBaseName");
+        String dataBaseName = (String) map.get("databaseName");
         String databaseType = (String) map.get("databaseType");
         String tableName = (String) map.get("tableName");
 //        if(redisTemplate.hasKey("DataSource")){
@@ -326,19 +326,14 @@ public class TableInfoServiceImpl implements ITableInfoService {
             return stringBuilder.toString();
         }).collect(Collectors.toList());
 
-//        if(redisTemplate.hasKey("DataSource")){
-//            DataSource dataSource =JSON.parseObject(redisTemplate.opsForValue().get("DataSource").toString(),DataSource.class);
-//            tableInfoMapper.updateMysqlTable(dataSource.getDatabaseName(),tableName,tableComment,list);
-//        }else {
-//            String dataBaseName = url;
-//            tableInfoMapper.updateMysqlTable(dataBaseName,tableName,tableComment,list);
-//        }
-
+        //备份要删除的表sql
+        String backupSql = tableInfoMapper.backupTableSql(databaseName,tableName).get("Create Table");
         try {
             tableInfoMapper.updateMysqlTable(databaseName, tableName, tableComment, list);
         } catch (Exception e) {
-            // 如果异常进行模拟回滚-》执行创建原始表结构语句
-            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            // 恢复修改前数据表
+            tableInfoMapper.executeCreateTableSql(backupSql);
+//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
         }
 
     }

+ 24 - 5
zkqy-datamodeling/src/main/resources/mapper/datamodeling/TableInfoMapper.xml

@@ -12,6 +12,10 @@
         <result property="isAuto" column="isAuto" javaType="boolean"></result>
     </resultMap>
 
+    <insert id="executeCreateTableSql">
+        ${createTableSql}
+    </insert>
+
     <update id="useDataBase">
         use ${dataBaseName}
     </update>
@@ -68,19 +72,30 @@
         DROP TABLE IF EXISTS ${tableName};
     </delete>
 
+<!--    <update id="updateMysqlTable">-->
+<!--        START TRANSACTION;-->
+<!--        DROP TABLE `${dataBaseName}`.`${tableName}`;-->
+<!--        IF NOT EXISTS (  CREATE TABLE `${dataBaseName}`.`${tableName}`-->
+<!--        (-->
+<!--        <foreach collection="filedList" item="filed" separator=",">-->
+<!--            ${filed}-->
+<!--        </foreach>-->
+<!--        )COMMENT #{tableComment};-->
+<!--         ) THEN ROLLBACK;-->
+<!--        END IF;-->
+
+<!--        COMMIT;-->
+<!--    </update>-->
+
     <update id="updateMysqlTable">
-        START TRANSACTION;
         DROP TABLE `${dataBaseName}`.`${tableName}`;
-        IF NOT EXISTS (  CREATE TABLE `${dataBaseName}`.`${tableName}`
+        CREATE TABLE `${dataBaseName}`.`${tableName}`
         (
         <foreach collection="filedList" item="filed" separator=",">
             ${filed}
         </foreach>
         )COMMENT #{tableComment};
-         ) THEN ROLLBACK;
-        END IF;
 
-        COMMIT;
     </update>
 
     <select id="mysqlTableFieldInfo" resultMap="mysqlTableInfoResult">
@@ -103,6 +118,10 @@
 
     </select>
 
+    <select id="backupTableSql" resultType="map">
+        SHOW CREATE TABLE `${dataBaseName}`.`${tableName}`
+    </select>
+
 
     <select id="sqlServerTableExist" resultType="int">
         select count(1) from sysobjects where id = object_id(#{tableName})