소스 검색

mysql建库建表

xuezizhuo 2 년 전
부모
커밋
d6b77295f2

+ 1 - 1
src/main/java/com/customer/constant/UrlSuffix.java

@@ -2,7 +2,7 @@ package com.customer.constant;
 
 public class UrlSuffix {
 
-    public static final String MYSQL = "?serverTimezone=GMT%2B8&characterEncoding=utf8&useSSL=true";
+    public static final String MYSQL = "?serverTimezone=GMT%2B8&characterEncoding=utf8&useSSL=true&allowMultiQueries=true";
     public static final String SQLSERVER = ";encrypt=true;trustServerCertificate=true";
     public static final String ORACLE = "";
     public static final String DM = "";

+ 8 - 2
src/main/java/com/customer/controller/TableInfoController.java

@@ -13,11 +13,17 @@ import java.util.Map;
 public class TableInfoController {
 
     @Resource
-    private ITableInfoService testService;
+    private ITableInfoService tableInfoService;
 
     @PostMapping("/createDatabase")
     public AjaxResult crateDatabase(@RequestBody Map<String, Object> map){
-        testService.createDataBase(map);
+        tableInfoService.createMysqlDataBase(map);
          return AjaxResult.success();
     }
+
+    @PostMapping("/createSqlServerDataBase")
+    public AjaxResult createSqlServerDataBase(@RequestBody Map<String, Object> map) throws Exception {
+        tableInfoService.createSqlServerDataBase(map);
+        return AjaxResult.success();
+    }
 }

+ 18 - 5
src/main/java/com/customer/mapper/TableInfoMapper.java

@@ -7,18 +7,31 @@ import java.util.List;
 
 public interface TableInfoMapper {
 
+    //---------------------------------mysql------------------------------------------
     /**
-     * 创建数据库
+     * 使用数据库
      */
-    void createDataBase(String dataBaseName);
+    void useDataBase(String dataBaseName);
 
     /**
-     * 使用数据库
+     * 创建msql数据库表
      */
-    void useDataBase(String dataBaseName);
+    void createMysqlDataBase(@Param("dataBaseName") String dataBaseName,@Param("tableName") String tableName,@Param("filedList") List<String> filedList);
+
+    //---------------------------------sqlServer------------------------------------------
+
+    /**
+     * 判断数据库是否存在
+     */
+    int existOrNot(@Param("dataBaseName") String dataBaseName);
+
+    /**
+     * 创建数据库
+     */
+    void createSqlServerDataBase(String dataBaseName);
 
     /**
      * 创建数据表
      */
-    void createTable(@Param("tableName") String tableName,@Param("filedList") List<String> filedList);
+    void createSqlServerTable(@Param("tableName") String tableName,@Param("filedList") List<String> filedList);
 }

+ 3 - 0
src/main/java/com/customer/pojo/TableInfo.java

@@ -20,6 +20,9 @@ public class TableInfo {
     /** 是否为主键 */
     private Boolean isPrimary;
 
+    /** 自增 */
+    private Boolean isAuto;
+
     /** 字段描述 */
     private String fieldDescription;
 

+ 9 - 1
src/main/java/com/customer/service/ITableInfoService.java

@@ -5,5 +5,13 @@ import java.util.Map;
 
 public interface ITableInfoService {
 
-    void createDataBase(Map<String,Object> map);
+    /**
+     * 创建mysql数据库和表
+     */
+    void createMysqlDataBase(Map<String,Object> map);
+
+    /**
+     * 创建salServer数据库和表
+     */
+    void createSqlServerDataBase(Map<String,Object> map) throws Exception;
 }

+ 48 - 6
src/main/java/com/customer/service/impl/TableInfoServiceImpl.java

@@ -1,9 +1,12 @@
 package com.customer.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.customer.config.DynamicDataSource;
+import com.customer.config.GenConfig;
 import com.customer.mapper.TableInfoMapper;
 import com.customer.pojo.TableInfo;
 import com.customer.service.ITableInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -16,29 +19,68 @@ import java.util.stream.Collectors;
 public class TableInfoServiceImpl implements ITableInfoService {
 
     @Resource
-    private TableInfoMapper testMapper;
+    private TableInfoMapper tableInfoMapper;
+
+    @Autowired
+    private DynamicDataSource dynamicDataSource;
 
     @Override
     @Transactional
-    public void createDataBase(Map<String,Object> map) {
+    public void createMysqlDataBase(Map<String, Object> map) {
         String dataBaseName = (String) map.get("dataBaseName");
-        testMapper.createDataBase(dataBaseName);
-        testMapper.useDataBase(dataBaseName);
         String tableName = (String) map.get("tableName");
         List<TableInfo> filedList = JSON.parseArray(JSON.toJSONString(map.get("field")), TableInfo.class);
         List<String> list= filedList.stream().map(filed->{
             StringBuilder stringBuilder = new StringBuilder();
             stringBuilder.append(filed.getFieldName()+" ")
-                    .append(filed.getFieldType()+"(10) ");
+                    .append(filed.getFieldType()+" ");
             if(filed.getIsNull()){
                 stringBuilder.append("NOT NULL ");
             }
             if(filed.getIsPrimary()){
                 stringBuilder.append("PRIMARY KEY ");
+                if(filed.getIsAuto()){
+                    stringBuilder.append("AUTO_INCREMENT ");
+                }
             }
             stringBuilder.append("COMMENT '"+filed.getFieldDescription()+"'");
             return stringBuilder.toString();
         }).collect(Collectors.toList());
-        testMapper.createTable(tableName,list);
+        tableInfoMapper.createMysqlDataBase(dataBaseName,tableName,list);
+    }
+
+    @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);
+        List<String> list= filedList.stream().map(filed->{
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.append(filed.getFieldName()+" ")
+                    .append(filed.getFieldType()+" ");
+            if(filed.getIsNull()){
+                stringBuilder.append("NOT NULL ");
+            }
+            if(filed.getIsPrimary()){
+                stringBuilder.append("PRIMARY KEY ");
+                if(filed.getIsAuto()){
+                    stringBuilder.append("IDENTITY(1,1) ");
+                }
+            }
+            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);
+        }
+
+
     }
 }

+ 2 - 2
src/main/resources/application.yml

@@ -6,12 +6,12 @@ spring:
   datasource:
     dbtype: mysql
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&allowMultiQueries=true
     username: root
     password: root
 logging:
   level:
-    com.hdax.mapper : debug
+    com.customer.mapper : debug
 mybatis-plus:
   mapper-locations: classpath:mapper/*.xml
   configuration:

+ 0 - 35
src/main/resources/bootstrap.properties

@@ -1,35 +0,0 @@
-
-
-
-#################################  多数据源配置  #########################################
-#参考:https://www.cnblogs.com/viwofer/p/13149863.html (Oracle数据源的配置使用默认的即可)
-#如果同时配置了MySQL和SqlServer的数据源,并同时启动MySQL和SqlServer的数据源配置,注意是两个数据源的都同时启动,可能会出现如下错误并给出提示信息:
-#错误:Field transactionManager in dump.pspaceTodb.base.aspect.TransactionAdviceConfig required a single bean, but 2 were found:
-#提示信息:Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed
-
-#问题的原因:MySQL和SqlServer数据库的配置类没有分主次,所以导致启动失败;
-#解决方法:在MySQL或SqlServer配置类的每个方法上都加上@Primary,注意只能在其中一个数据源上添加@Primary注解,在加了@Primary注解的配置类上,
-# 执行的sql也会优先使用加了@Primary注解的配置类,所以数据只会优先出现在有@Primary注解对应的数据库中;
-
-#MySQL数据库连接配置
-spring.datasource.mysql.type=com.alibaba.druid.pool.DruidDataSource
-spring.datasource.mysql.driver-class-name=com.mysql.cj.jdbc.Driver
-#注意是jdbc-url不是url,否则报jdbcUrl is required with driverClassName错误
-spring.datasource.mysql.jdbc-url=jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf8&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8
-spring.datasource.mysql.username=root
-spring.datasource.mysql.password=root
-
-#SqlServer数据库连接配置
-spring.datasource.mssql.type=com.alibaba.druid.pool.DruidDataSource
-spring.datasource.mssql.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
-#注意是jdbc-url不是url,否则报jdbcUrl is required with driverClassName错误
-spring.datasource.mssql.jdbc-url=jdbc:sqlserver://localhost:1433;databasename=test
-spring.datasource.mssql.username=sa
-spring.datasource.mssql.password=root1234
-
-#Oracle数据库连接配置
-#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
-#spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
-#spring.datasource.url=jdbc:oracle:thin:@192.168.18.200:1521:orcl
-#spring.datasource.username=root
-#spring.datasource.password=admin123

+ 30 - 10
src/main/resources/mapper/TableInfoMapper.xml

@@ -2,20 +2,40 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.customer.mapper.TableInfoMapper">
 
-    <update id="createDataBase" parameterType="string">
-        CREATE database IF NOT EXISTS `${dataBaseName}`
-    </update>
-
     <update id="useDataBase">
-        use `${dataBaseName}`
+        use ${dataBaseName}
     </update>
 
-    <update id="createTable">
+    <update id="createMysqlDataBase">
+
+        CREATE database IF NOT EXISTS `${dataBaseName}`;
+        use `${dataBaseName}`;
         CREATE TABLE IF NOT EXISTS `${tableName}`
         (
-            <foreach collection="filedList" item="filed" separator=",">
-                ${filed}
-            </foreach>
-            )
+        <foreach collection="filedList" item="filed" separator=",">
+            ${filed}
+        </foreach>
+        );
     </update>
+
+
+
+    <select id="existOrNot" resultType="int">
+        select count(1) From master.dbo.sysdatabases where name = #{dataBaseName}
+    </select>
+
+    <update id="createSqlServerDataBase">
+        CREATE database ${dataBaseName}
+    </update>
+
+    <update id="createSqlServerTable">
+        create table ${tableName}
+        (
+        <foreach collection="filedList" item="filed" separator=",">
+            ${filed}
+        </foreach>
+        )
+    </update>
+
+
 </mapper>