Browse Source

mysql、sqlserver建库建表接口

xuezizhuo 2 years ago
parent
commit
7ba5399f1b

+ 27 - 0
src/main/java/com/customer/controller/TableInfoController.java

@@ -1,8 +1,11 @@
 package com.customer.controller;
 
 
+import com.customer.config.DynamicDataSource;
+import com.customer.config.GenConfig;
 import com.customer.service.ITableInfoService;
 import com.customer.utils.AjaxResult;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -15,15 +18,39 @@ public class TableInfoController {
     @Resource
     private ITableInfoService tableInfoService;
 
+    @Autowired
+    private DynamicDataSource dynamicDataSource;
+
     @PostMapping("/createDatabase")
     public AjaxResult crateDatabase(@RequestBody Map<String, Object> map){
+        String dataBaseName = (String) map.get("dataBaseName");
+        String tableName = (String) map.get("tableName");
+        if(tableInfoService.mysqlTableExist(dataBaseName,tableName)>0){
+            return AjaxResult.warn("当前数据库中表已存在");
+        }
         tableInfoService.createMysqlDataBase(map);
          return AjaxResult.success();
     }
 
     @PostMapping("/createSqlServerDataBase")
     public AjaxResult createSqlServerDataBase(@RequestBody Map<String, Object> map) throws Exception {
+        String dataBaseName = (String) map.get("dataBaseName");
+        String tableName = (String) map.get("tableName");
+        if(tableInfoService.sqlServerTableExist(dataBaseName,tableName)>0){
+            return AjaxResult.warn("当前数据库中表已存在");
+        }
         tableInfoService.createSqlServerDataBase(map);
         return AjaxResult.success();
     }
+
+    @PostMapping("/createDmDataBase")
+    public AjaxResult createDmDataBase(@RequestBody Map<String, Object> map){
+        String dataBaseName = (String) map.get("dataBaseName");
+        String tableName = (String) map.get("tableName");
+        if(tableInfoService.dmTableExist(dataBaseName,tableName)>0){
+            return AjaxResult.warn("当前数据库中表已存在");
+        }
+        return AjaxResult.success();
+    }
+
 }

+ 30 - 3
src/main/java/com/customer/mapper/TableInfoMapper.java

@@ -18,12 +18,22 @@ public interface TableInfoMapper {
      */
     void createMysqlDataBase(@Param("dataBaseName") String dataBaseName,@Param("tableName") String tableName,@Param("filedList") List<String> filedList);
 
+    /**
+     * 查询mysql数据库是否存在
+     */
+    int mysqlDataBaseExist(String dataBaseName);
+
+    /**
+     * 查询数据库表是否存在
+     */
+    int mysqlTableExist(@Param("dataBaseName") String dataBaseName,@Param("tableName") String tableName);
+
     //---------------------------------sqlServer------------------------------------------
 
     /**
-     * 判断数据库是否存在
+     * 查询数据库表是否存在
      */
-    int existOrNot(@Param("dataBaseName") String dataBaseName);
+    int sqlServerTableExist(String tableName);
 
     /**
      * 创建数据库
@@ -33,5 +43,22 @@ public interface TableInfoMapper {
     /**
      * 创建数据表
      */
-    void createSqlServerTable(@Param("tableName") String tableName,@Param("filedList") List<String> filedList);
+    void createSqlServerTable(@Param("dataBaseName") String dataBaseName,@Param("tableName") String tableName,@Param("filedList") List<String> filedList,@Param("descriptionList") List<String> descriptionList);
+
+    //---------------------------------DM------------------------------------------
+
+    /**
+     * 查询数据库表是否存在
+     */
+    int dmTableExist(@Param("dataBaseName") String dataBaseName,@Param("tableName") String tableName);
+
+
+
+
+    /**
+     * 判断数据库是否存在
+     */
+    int existOrNot(@Param("dataBaseName") String dataBaseName);
+
+
 }

+ 22 - 0
src/main/java/com/customer/service/ITableInfoService.java

@@ -1,5 +1,7 @@
 package com.customer.service;
 
+import org.apache.ibatis.annotations.Param;
+
 import java.util.List;
 import java.util.Map;
 
@@ -14,4 +16,24 @@ public interface ITableInfoService {
      * 创建salServer数据库和表
      */
     void createSqlServerDataBase(Map<String,Object> map) throws Exception;
+
+    /**
+     * 查询mysql数据库是否存在
+     */
+    int mysqlDataBaseExist(String dataBaseName);
+
+    /**
+     * 查询数据库表是否存在
+     */
+    int mysqlTableExist(String dataBaseName,String tableName);
+
+    /**
+     * 查询数据库表是否存在
+     */
+    int sqlServerTableExist(String dataBaseName,String tableName);
+
+    /**
+     * 查询数据库表是否存在
+     */
+    int dmTableExist(String dataBaseName,String tableName);
 }

+ 38 - 12
src/main/java/com/customer/service/impl/TableInfoServiceImpl.java

@@ -9,6 +9,7 @@ import com.customer.service.ITableInfoService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
 import java.util.List;
@@ -21,9 +22,6 @@ public class TableInfoServiceImpl implements ITableInfoService {
     @Resource
     private TableInfoMapper tableInfoMapper;
 
-    @Autowired
-    private DynamicDataSource dynamicDataSource;
-
     @Override
     @Transactional
     public void createMysqlDataBase(Map<String, Object> map) {
@@ -52,7 +50,6 @@ public class TableInfoServiceImpl implements ITableInfoService {
     @Override
     @Transactional
     public void createSqlServerDataBase(Map<String, Object> map) {
-
         String dataBaseName = (String) map.get("dataBaseName");
         String tableName = (String) map.get("tableName");
         List<TableInfo> filedList = JSON.parseArray(JSON.toJSONString(map.get("field")), TableInfo.class);
@@ -72,15 +69,44 @@ public class TableInfoServiceImpl implements ITableInfoService {
             return stringBuilder.toString();
         }).collect(Collectors.toList());
 
-        if(tableInfoMapper.existOrNot(dataBaseName)>0){
-            tableInfoMapper.useDataBase(dataBaseName);
-            tableInfoMapper.createSqlServerTable(tableName,list);
-        }else {
-            tableInfoMapper.createSqlServerDataBase(dataBaseName);
-            tableInfoMapper.useDataBase(dataBaseName);
-            tableInfoMapper.createSqlServerTable(tableName,list);
-        }
+        List<String> descriptionList = filedList.stream().map(filed ->{
+            StringBuilder stringBuilder = new StringBuilder();
+            if(StringUtils.hasLength(filed.getFieldDescription())){
+                stringBuilder.append("EXECUTE sp_addextendedproperty N'MS_Description',")
+                        .append("'"+filed.getFieldDescription()+"'")
+                        .append(", N'user', N'dbo', N'table', N")
+                        .append("'"+tableName+"'")
+                        .append(", N'column', N")
+                        .append("'"+filed.getFieldName()+"'");
+            }
+            return stringBuilder.toString();
+        }).collect(Collectors.toList());
 
+        tableInfoMapper.createSqlServerDataBase(dataBaseName);
+        tableInfoMapper.createSqlServerTable(dataBaseName,tableName,list,descriptionList);
+    }
 
+    @Override
+    public int mysqlDataBaseExist(String dataBaseName) {
+        return tableInfoMapper.mysqlDataBaseExist(dataBaseName);
+    }
+
+    @Override
+    public int mysqlTableExist(String dataBaseName, String tableName) {
+        return tableInfoMapper.mysqlTableExist(dataBaseName,tableName);
+    }
+
+    @Override
+    public int sqlServerTableExist(String dataBaseName,String tableName) {
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(dataBaseName)
+                .append(".dbo.")
+                .append(tableName);
+        return tableInfoMapper.sqlServerTableExist(stringBuilder.toString());
+    }
+
+    @Override
+    public int dmTableExist(String dataBaseName, String tableName) {
+        return tableInfoMapper.dmTableExist(dataBaseName,tableName);
     }
 }

+ 28 - 4
src/main/resources/mapper/TableInfoMapper.xml

@@ -18,24 +18,48 @@
         );
     </update>
 
+    <select id="mysqlDataBaseExist" resultType="int">
+        SELECT count(1) FROM information_schema.SCHEMATA where SCHEMA_NAME= #{dataBaseName};
+    </select>
 
+    <select id="mysqlTableExist" resultType="int">
+        SELECT count(1) FROM information_schema.TABLES t, information_schema.SCHEMATA n WHERE t.table_name = #{tableName} AND n.SCHEMA_NAME = #{dataBaseName};
+    </select>
 
-    <select id="existOrNot" resultType="int">
-        select count(1) From master.dbo.sysdatabases where name = #{dataBaseName}
+
+
+    <select id="sqlServerTableExist" resultType="int">
+        select count(1) from sysobjects where id = object_id(#{tableName})
     </select>
 
     <update id="createSqlServerDataBase">
-        CREATE database ${dataBaseName}
+        IF DB_ID ( <![CDATA[ N'${dataBaseName}' ]]>) IS  NULL
+        CREATE DATABASE ${dataBaseName};
     </update>
 
     <update id="createSqlServerTable">
+
+        use ${dataBaseName};
         create table ${tableName}
         (
         <foreach collection="filedList" item="filed" separator=",">
             ${filed}
         </foreach>
-        )
+        );
+        <foreach collection="descriptionList" item="description" separator=";">
+            ${description}
+        </foreach>
     </update>
 
+    <select id="existOrNot" resultType="int">
+        select count(1) From master.dbo.sysdatabases where name = #{dataBaseName}
+    </select>
+
+
+    <select id="dmTableExist" resultType="int">
+        select count(1) from dba_segments where dba_segments.OWNER=#{dataBaseName} and SEGMENT_NAME=#{tableName}
+    </select>
+
+
 
 </mapper>