根据Excel接口文档生成不同类型的数据创建表的sql

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 根据Excel接口文档生成不同类型的数据创建表的sql

文章目录

背景

在平时开发接口的时候,经常会根据接口文档将数据插入第三方数据库的情况,本篇我们介绍一下,读取excel将字段提取出来生成创表的sql。非常适用。

快速开始

话不多说,直接上代码。

表和列实体类

**

* 实体表信息

*/

@Data

@TableName("`table_entity`")

public class TableEntity {

   @TableId(value = "table_id", type = IdType.AUTO)

   private Integer tableId;

   //表名

   @TableField(value = "table_name")

   private String tableName;

   //表注释

   @TableField(value = "table_comment")

   private String tableComment;

   //数据库名

   @TableField(value = "db_name")

   private String databaseName;

   //数据库类型 ORACLE,MSSQL,MYSQL

   @TableField(value = "db_type")

   private String databaseType;

   //数据库SCHEMA

   @TableField(value = "table_schema")

   private String tableSchema;

   //实体列名字

   private List<ColumnEntity> tableColumns;

@Data

@TableName("`column_entity`")

public class ColumnEntity {

   @TableId(value = "column_id", type = IdType.AUTO)

   @ExcelProperty(value="序号")

   private Integer columnId;

   //表的ID

   @ExcelProperty(value="表名ID")

   @TableField("table_id")

   private Integer tableId;

   //列名

   @ExcelProperty(value="列名")

   @TableField("column_name")

   private String columnName;

   //列注释

   @ExcelProperty(value="列注释")

   @TableField("column_desc")

   private String ColumnDesc;

   //类型

   @ExcelProperty(value="数据类型")

   @TableField("column_type")

   private String columnType;

   //长度

   @ExcelProperty(value="长度")

   @TableField("column_len")

   private String columnLen;

   //精度

   @ExcelProperty(value="精度")

   @TableField("precision")

   private String precision;

   //是否主键 Y true 都默认是主键

   @ExcelProperty(value="是否主键")

   @TableField("isPrimaryKey")

   private String isPrimaryKey;

   //是否允许为空 Y true 不允许为空

   @ExcelProperty(value="是否允许为空")

   @TableField("isNotNull")

   private String isNotNull;

   //是否索引列,方便进行生成建表语句的时候进行生成索引

   @ExcelProperty(value="是否索引列")

   @TableField("isIdxCol")

   private String isIdxCol;

}

建表语句

-- test.table_entity definition

CREATE TABLE `table_entity` (

 `table_id` int NOT NULL AUTO_INCREMENT COMMENT '表主键',

 `table_name` varchar(100) NOT NULL COMMENT '表名',

 `table_comment` varchar(200) DEFAULT NULL COMMENT '表注释',

 `db_name` varchar(10) DEFAULT NULL COMMENT '表对应的数据库名字',

 `db_type` varchar(10) DEFAULT NULL COMMENT '数据库类型',

 `table_schema` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '表对应的schema',

 `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

 `create_by` varchar(100) DEFAULT NULL COMMENT '创建人',

 `update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',

 `update_by` varchar(100) DEFAULT NULL COMMENT '更新人',

 PRIMARY KEY (`table_id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='表实体信息';

-- test.column_entity definition

CREATE TABLE `column_entity` (

 `column_id` int NOT NULL AUTO_INCREMENT COMMENT '列序号',

 `table_id` int NOT NULL COMMENT '表信息ID',

 `column_name` varchar(100) NOT NULL COMMENT '列名',

 `column_desc` varchar(100) DEFAULT NULL COMMENT '列注释',

 `column_type` varchar(100) NOT NULL COMMENT '数据类型',

 `column_len` int DEFAULT NULL COMMENT '列长度',

 `precision` int DEFAULT NULL COMMENT '精度',

 `isPrimaryKey` varchar(1) DEFAULT NULL COMMENT '是否是主键',

 `isNotNull` varchar(1) DEFAULT NULL COMMENT '是否允许为空',

 `isIdxCol` varchar(1) DEFAULT NULL COMMENT '是否索引列',

 `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

 `create_by` varchar(10) DEFAULT NULL COMMENT '创建人',

 `update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',

 `update_by` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新人',

 PRIMARY KEY (`column_id`),

 KEY `column_entity_column_name_IDX` (`column_name`) USING BTREE,

 KEY `column_entity_FK` (`table_id`),

 CONSTRAINT `column_entity_FK` FOREIGN KEY (`table_id`) REFERENCES `table_entity` (`table_id`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='列信息表';


mapper类接口

/**

* 表实体信息映射

*/

@Mapper

public interface TableEntityMapper extends BaseMapper<TableEntity> {

}

/**

* 实体类映射接口

*/

@Mapper

public interface ColumnEntityMapper extends BaseMapper<ColumnEntity> {

}

创建表辅助类

目前写的支持mysql,sqlsever,oracle,需要可以自行修改,代码可以合并一下,现在分开的。

package com.elite.springboot.utils;

import com.elite.springboot.entity.ColumnEntity;

import com.elite.springboot.entity.ColumnTypeConstant;

import com.elite.springboot.entity.TableEntity;

import java.util.List;

/**

* 创建表辅助类

* create database.table(

*   column type  isprimarykey isnull default comment '',

*   column2 type ,

*   ....

* )

*  列顺序

*  1.mysql:  字段 类型 约束  默认值  注释

*  2.oracle: 字段 类型 约束  默认值  注释单独进行拼接一个串。

*  3.mssql:

*/

public class CreateTableHelper {

   /**

    * @Param:将实体类转换为mysql创表的sql

    * @return:

    */

   public static String getMysqlSqlByConvertEntity(TableEntity tableEntity) {

       StringBuffer sql = new StringBuffer();

       //存在则删除表

       sql.append("DROP TABLE IF EXISTS "+tableEntity.getTableName()+";");

       sql.append("CREATE TABLE `");

       sql.append(tableEntity.getDatabaseName());

       sql.append("`.`");

       sql.append(tableEntity.getTableName());

       sql.append("` (");

       // CREATE TABLE `databaseName`.`tablePhysicalName` (

       List<ColumnEntity> columns = tableEntity.getTableColumns();

       // 主键列

       String primaryKeyColumn = null;

       //

       int i = 0;

       // 获取主键

       for (ColumnEntity column : columns) {

           // 将pk为true的设为主键

           if ("true".equals(column.getIsPrimaryKey()) || "Y".equals(column.getIsPrimaryKey())) {

               primaryKeyColumn = column.getColumnName();

               break;

           }

       }

       //循环列拼接动态的sql的顺序:

       //1.mysql:  字段 类型 约束  默认值  注释

       //2.oracle: 字段 类型 约束  默认值  注释单独进行拼接一个串。

       //3.mssql:

       for (ColumnEntity column : columns) {

           sql.append(" `");

           sql.append(column.getColumnName().trim());

           sql.append("` ");

           // `physicalColumnName`

           // 根据NOT NULL 来拼接

           if ("Y".equals(column.getIsNotNull()) || "true".equals(column.getIsNotNull())) { // 如果不允许为空,则拼接NOT NULL

               //类型

               String type = column.getColumnType().toLowerCase();

               if (type.indexOf("varchar") != -1) {

                   type = ColumnTypeConstant.VARCHAR;

               } else if (type.indexOf("number") != -1) {

                   type = ColumnTypeConstant.INT;

                   //默认长度

                   if (column.getColumnLen() == null || column.getColumnLen().isEmpty()) {

                       column.setColumnLen("11");

                   }

               } else if (type.indexOf("char") != -1) {

                   type = ColumnTypeConstant.CHAR;

               }

               // 根据类型选择是否拼接长度

               if (ColumnTypeConstant.CHAR.equals(type) || ColumnTypeConstant.VARCHAR.equals(type)) { // 文本需要拼接长度

                   sql.append(type);

                   sql.append("(");

                   sql.append(column.getColumnLen());

                   sql.append(") CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '");

               } else if (ColumnTypeConstant.TEXT.equals(type) || ColumnTypeConstant.LONG_TEXT.equals(type)) { // 文本不需要拼接长度

                   sql.append(type);

                   sql.append(" CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '");

               } else if (ColumnTypeConstant.DATE.equals(type)) { // 时间不需要拼接长度

                   sql.append(type);

                   sql.append(" NOT NULL COMMENT '");

               } else if (ColumnTypeConstant.DATE_TIME.equals(type) || ColumnTypeConstant.TIME_STAMP.equals(type)) { // 时间需要拼接长度 并且长度为0

                   sql.append(type);

                   sql.append("(0) NOT NULL COMMENT '");

               } else if (ColumnTypeConstant.INT.equals(type)) { // 数字需要拼接长度

                   sql.append(type);

                   sql.append("(");

                   sql.append(column.getColumnLen());

                   sql.append(")  NOT NULL COMMENT '");

               }

           } else { // 如果允许为空,则拼接 NULL DEFAULT NULL

               String type = column.getColumnType().toLowerCase();

               //类型转换

               if (type.indexOf("varchar") != -1) {

                   type = ColumnTypeConstant.VARCHAR;

               } else if (type.indexOf("number") != -1) {

                   type = ColumnTypeConstant.INT;

                   //默认长度

                   if (column.getColumnLen() == null || column.getColumnLen().isEmpty()) {

                       column.setColumnLen("11");

                   }

               } else if (type.indexOf("char") != -1) {

                   type = ColumnTypeConstant.CHAR;

               }

               // 根据类型选择是否拼接长度

               if (ColumnTypeConstant.CHAR.equals(type) || ColumnTypeConstant.VARCHAR.equals(type)) { // 文本需要拼接长度

                   sql.append(type);

                   sql.append("(");

                   sql.append(column.getColumnLen());

                   sql.append(") CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '");

               } else if (ColumnTypeConstant.TEXT.equals(type) || ColumnTypeConstant.LONG_TEXT.equals(type)) { // 文本不需要拼接长度

                   sql.append(type);

                   sql.append(" CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '");

               } else if (ColumnTypeConstant.DATE.equals(type)) { // 时间不需要拼接长度

                   sql.append(type);

                   sql.append(" NULL DEFAULT NULL COMMENT '");

               } else if (ColumnTypeConstant.DATE_TIME.equals(type) || ColumnTypeConstant.TIME_STAMP.equals(type)) { // 时间需要拼接长度 并且长度为0

                   sql.append(type);

                   sql.append("(0) NULL DEFAULT NULL COMMENT '");

               } else if (ColumnTypeConstant.INT.equals(type) || ColumnTypeConstant.BIGINT.equals(type) || ColumnTypeConstant.LONG.equals(type)) { // 数字需要拼接长度

                   sql.append(type);

                   sql.append("(");

                   sql.append(column.getColumnLen());

                   sql.append(")  NULL DEFAULT NULL COMMENT '");

               }

           }

           i++;

           // 拼接逻辑列名/如果为最后一个字段就不拼接,

           if (columns.size() == i && primaryKeyColumn == null) {

               sql.append(column.getColumnDesc());

               sql.append("'");

           } else {

               sql.append(column.getColumnDesc());

               sql.append("',");

           }

       }

       // 拼接主键

       if (primaryKeyColumn != null) {

           sql.append(" PRIMARY KEY (`");

           sql.append(primaryKeyColumn);

           sql.append("`) USING BTREE ) ");

       } else {

           sql.append(") ");

       }

       // 拼接引擎和逻辑表名

       sql.append("ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '");

       sql.append(tableEntity.getTableComment());

       sql.append("'  ROW_FORMAT = Compact;");

       System.out.println(sql.toString());

       return sql.toString();

   }

   /**

    * @Param:将实体类转换为oracle创表的sql

    * @return:

    */

   public static String getOracleSqlByConvertEntity(TableEntity tableEntity) {

       StringBuffer sql = new StringBuffer();

       //删表默认注释掉

       sql.append("--DROP TABLE "+tableEntity.getTableName()+";");

       StringBuffer comments = new StringBuffer();

       sql.append("CREATE TABLE `");

       sql.append(tableEntity.getDatabaseName());

       sql.append("`.`");

       sql.append(tableEntity.getTableName());

       sql.append("` (");

       // CREATE TABLE `databaseName`.`tablePhysicalName` (

       List<ColumnEntity> columns = tableEntity.getTableColumns();

       //获取表名注释

       comments.append("COMMENT ON TABLE "+ tableEntity.getTableName()+" is '"+tableEntity.getTableComment() +"';");

       // 主键列

       String primaryKeyColumn = null;

       int i = 0;

       // 获取主键

       for (ColumnEntity column : columns) {

           // 将pk为true的设为主键

           if ("true".equals(column.getIsPrimaryKey()) || "Y".equals(column.getIsPrimaryKey())) {

               primaryKeyColumn = column.getColumnName();

               break;

           }

       }

       //循环列拼接动态的sql的顺序:

       //1.mysql:  字段 类型 约束  默认值  注释

       //2.oracle: 字段 类型 约束  默认值  注释单独进行拼接一个串。

       //3.mssql:

       for (ColumnEntity column : columns) {

           sql.append(" `");

           sql.append(column.getColumnName().trim());

           sql.append("` ");

           // `physicalColumnName`

           // 根据NOT NULL 来拼接

           if ("Y".equals(column.getIsNotNull()) || "true".equals(column.getIsNotNull())) { // 如果不允许为空,则拼接NOT NULL

               //类型

               String type = column.getColumnType().toLowerCase();

               if (type.indexOf("varchar") != -1) {

                   type = ColumnTypeConstant.VARCHAR;

               } else if (type.indexOf("number") != -1) {

                   type = ColumnTypeConstant.INT;

                   //默认长度

                   if (column.getColumnLen() == null || column.getColumnLen().isEmpty()) {

                       column.setColumnLen("11");

                   }

               } else if (type.indexOf("char") != -1) {

                   type = ColumnTypeConstant.CHAR;

               }

               // 根据类型选择是否拼接长度

               if (ColumnTypeConstant.CHAR.equals(type) || ColumnTypeConstant.VARCHAR.equals(type)) { // 文本需要拼接长度

                   sql.append(type);

                   sql.append("(");

                   sql.append(column.getColumnLen());

                   sql.append(")");

               } else if (ColumnTypeConstant.TEXT.equals(type) || ColumnTypeConstant.LONG_TEXT.equals(type)) { // 文本不需要拼接长度

                   sql.append(type);

                   sql.append(" '");

               } else if (ColumnTypeConstant.DATE.equals(type)) { // 时间不需要拼接长度

                   sql.append(type);

                   sql.append(" NOT NULL ");

               } else if (ColumnTypeConstant.DATE_TIME.equals(type) || ColumnTypeConstant.TIME_STAMP.equals(type)) { // 时间需要拼接长度 并且长度为0

                   sql.append(type);

                   sql.append("(0) NOT NULL ");

               } else if (ColumnTypeConstant.INT.equals(type)) { // 数字需要拼接长度

                   sql.append(type);

                   sql.append("(");

                   sql.append(column.getColumnLen());

                   sql.append(")  NOT NULL ");

               }

           } else { // 如果允许为空,则拼接 NULL DEFAULT NULL

               String type = column.getColumnType().toLowerCase();

               //类型转换

               if (type.indexOf("varchar") != -1) {

                   type = ColumnTypeConstant.VARCHAR;

               } else if (type.indexOf("number") != -1) {

                   type = ColumnTypeConstant.INT;

                   //默认长度

                   if (column.getColumnLen() == null || column.getColumnLen().isEmpty()) {

                       column.setColumnLen("11");

                   }

               } else if (type.indexOf("char") != -1) {

                   type = ColumnTypeConstant.CHAR;

               }

               // 根据类型选择是否拼接长度

               if (ColumnTypeConstant.CHAR.equals(type) || ColumnTypeConstant.VARCHAR.equals(type)) { // 文本需要拼接长度

                   sql.append(type);

                   sql.append("(");

                   sql.append(column.getColumnLen());

                   sql.append(") ");

               } else if (ColumnTypeConstant.TEXT.equals(type) || ColumnTypeConstant.LONG_TEXT.equals(type)) { // 文本不需要拼接长度

                   sql.append(type);

                   sql.append(" ");

               } else if (ColumnTypeConstant.DATE.equals(type)) { // 时间不需要拼接长度

                   sql.append(type);

                   sql.append(" ");

               } else if (ColumnTypeConstant.DATE_TIME.equals(type) || ColumnTypeConstant.TIME_STAMP.equals(type)) { // 时间需要拼接长度 并且长度为0

                   sql.append(type);

                   sql.append("(0) ");

               } else if (ColumnTypeConstant.INT.equals(type) || ColumnTypeConstant.BIGINT.equals(type) || ColumnTypeConstant.LONG.equals(type)) { // 数字需要拼接长度

                   sql.append(type);

                   sql.append("(");

                   sql.append(column.getColumnLen());

                   sql.append(") ");

               }

           }

           i++;

           // 拼接逻辑列名/如果为最后一个字段就不拼接,

           if (columns.size() == i && primaryKeyColumn == null) {

               sql.append("");

           } else {

               sql.append(",");

           }

           //每一列的注释

           comments.append( "COMMENT ON COLUMN "+tableEntity.getTableName()+"."+column.getColumnName()+" IS '" + column.getColumnDesc()+"';");

       }

       // 拼接主键

       if (primaryKeyColumn != null) {

           sql.append(" PRIMARY KEY (`");

           sql.append(primaryKeyColumn);

           sql.append("`)); ");

       } else {

           sql.append(") ;");

       }

       System.out.println("sql:"+sql.toString());

       System.out.println("comment:"+comments.toString());

       return sql.toString()+comments.toString();

   }

   /**

    * @Param:将实体类转换为mssql创表的sql

    * @return:

    */

   public static  String getMSSQLSqlByConvertEntity(TableEntity tableEntity) {

       //建表字段的sql

       StringBuffer sql = new StringBuffer();

       //判断是否存在存在进行删除

       sql.append("IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].["+tableEntity.getTableName()+"]') AND type in (N'U')");

       sql.append("DROP TABLE [dbo].["+tableEntity.getTableName()+"];");

       sql.append("[dbo].["+tableEntity.getTableName()+"]");

       //表注释

       StringBuffer comments = new StringBuffer();

       comments.append("EXEC sp_addextendedproperty 'MS_Description', '"+tableEntity.getTableComment()+"', 'SCHEMA', dbo, 'table', "+tableEntity.getTableName()+", null, null;");

       // CREATE TABLE `databaseName`.`tablePhysicalName` (

       List<ColumnEntity> columns = tableEntity.getTableColumns();

       // 主键列

       String primaryKeyColumn = null;

       //

       int i = 0;

       // 获取主键

       for (ColumnEntity column : columns) {

           // 将pk为true的设为主键

           if ("true".equals(column.getIsPrimaryKey()) || "Y".equals(column.getIsPrimaryKey())) {

               primaryKeyColumn = column.getColumnName();

               break;

           }

       }

       //循环列拼接动态的sql的顺序:

       for (ColumnEntity column : columns) {

           sql.append(" `");

           sql.append(column.getColumnName().trim());

           sql.append("` ");

           // `physicalColumnName`

           // 根据NOT NULL 来拼接

           if ("Y".equals(column.getIsNotNull()) || "true".equals(column.getIsNotNull())) { // 如果不允许为空,则拼接NOT NULL

               //类型

               String type = column.getColumnType().toLowerCase();

               if (type.indexOf("varchar") != -1) {

                   type = ColumnTypeConstant.VARCHAR;

               } else if (type.indexOf("number") != -1) {

                   type = ColumnTypeConstant.INT;

                   //默认长度

                   if (column.getColumnLen() == null || column.getColumnLen().isEmpty()) {

                       column.setColumnLen("11");

                   }

               } else if (type.indexOf("char") != -1) {

                   type = ColumnTypeConstant.CHAR;

               }

               // 根据类型选择是否拼接长度

               if (ColumnTypeConstant.CHAR.equals(type) || ColumnTypeConstant.VARCHAR.equals(type)) { // 文本需要拼接长度

                   sql.append(type);

                   sql.append("(");

                   sql.append(column.getColumnLen());

                   sql.append(")");

               } else if (ColumnTypeConstant.TEXT.equals(type) || ColumnTypeConstant.LONG_TEXT.equals(type)) { // 文本不需要拼接长度

                   sql.append(type);

                   sql.append(" ");

               } else if (ColumnTypeConstant.DATE.equals(type)) { // 时间不需要拼接长度

                   sql.append(type);

                   sql.append(" NOT NULL");

               } else if (ColumnTypeConstant.DATE_TIME.equals(type) || ColumnTypeConstant.TIME_STAMP.equals(type)) { // 时间需要拼接长度 并且长度为0

                   sql.append(type);

                   sql.append("(0) NOT NUL");

               } else if (ColumnTypeConstant.INT.equals(type)) { // 数字需要拼接长度

                   sql.append(type);

                   sql.append("(");

                   sql.append(column.getColumnLen());

                   sql.append(")  NOT NULL");

               }

           } else { // 如果允许为空,则拼接 NULL DEFAULT NULL

               String type = column.getColumnType().toLowerCase();

               //类型转换

               if (type.indexOf("varchar") != -1) {

                   type = ColumnTypeConstant.VARCHAR;

               } else if (type.indexOf("number") != -1) {

                   type = ColumnTypeConstant.INT;

                   //默认长度

                   if (column.getColumnLen() == null || column.getColumnLen().isEmpty()) {

                       column.setColumnLen("11");

                   }

               } else if (type.indexOf("char") != -1) {

                   type = ColumnTypeConstant.CHAR;

               }

               // 根据类型选择是否拼接长度

               if (ColumnTypeConstant.CHAR.equals(type) || ColumnTypeConstant.VARCHAR.equals(type)) { // 文本需要拼接长度

                   sql.append(type);

                   sql.append("(");

                   sql.append(column.getColumnLen());

                   sql.append(") ");

               } else if (ColumnTypeConstant.TEXT.equals(type) || ColumnTypeConstant.LONG_TEXT.equals(type)) { // 文本不需要拼接长度

                   sql.append(type);

                   sql.append(" ");

               } else if (ColumnTypeConstant.DATE.equals(type)) { // 时间不需要拼接长度

                   sql.append(type);

                   sql.append(" ");

               } else if (ColumnTypeConstant.DATE_TIME.equals(type) || ColumnTypeConstant.TIME_STAMP.equals(type)) { // 时间需要拼接长度 并且长度为0

                   sql.append(type);

                   sql.append("(0)  ");

               } else if (ColumnTypeConstant.INT.equals(type) || ColumnTypeConstant.BIGINT.equals(type) || ColumnTypeConstant.LONG.equals(type)) { // 数字需要拼接长度

                   sql.append(type);

                   sql.append("(");

                   sql.append(column.getColumnLen());

                   sql.append(") ");

               }

           }

           i++;

           // 拼接逻辑列名/如果为最后一个字段就不拼接,

           if (columns.size() == i && primaryKeyColumn == null) {

           } else {

               sql.append(",");

           }

           //追加注释表的sql

           comments.append("EXEC sp_addextendedproperty 'MS_Description', '"+column.getColumnDesc()+"', 'SCHEMA', dbo, 'table', "+tableEntity.getTableName()+", 'column', "+column.getColumnName()+";");

       }

       // 拼接主键

       if (primaryKeyColumn != null) {

           sql.append(", PRIMARY KEY (`");

           sql.append(primaryKeyColumn);

           sql.append("`); ");

       } else {

           sql.append("); ");

       }

       System.out.println(sql.toString());

       System.out.println(comments.toString());

       return sql.toString()+comments.toString();

   }

}

测试

保存信息到数据库

@Test

   public void test(){

       //插入主表ID

       TableEntity tableEntity = new TableEntity();

       tableEntity.setTableName("table1");

       tableEntity.setTableComment("测试表");

       tableEntity.setDatabaseName("test");

       tableEntity.setDatabaseType("mysql");

       tableEntity.setTableSchema("");

       tableEntityMapper.insert(tableEntity);

       ColumnEntity columnEntity = new ColumnEntity();

       columnEntity.setColumnName("test");

       columnEntity.setTableId(1);

       columnEntity.setColumnDesc("测试列");

       columnEntity.setColumnType("int");

       columnEntity.setColumnLen("30");

       columnEntity.setIsPrimaryKey("Y");

       columnEntity.setIsNotNull("N");

       columnEntityMapper.insert(columnEntity);

   }

生成sql

@Test

   public void shouldAnswerWithTrue() {

       List<ColumnEntity> columns = new ArrayList<>();

       ColumnEntity column1 = new ColumnEntity();

       column1.setColumnName("id");

       column1.setColumnDesc("主键");

       column1.setColumnType("int");

       column1.setColumnLen("30");

       column1.setIsPrimaryKey("Y");

       column1.setIsNotNull("true");

       ColumnEntity column2 = new ColumnEntity();

       column2.setColumnName("name");

       column2.setColumnDesc("姓名");

       column2.setColumnType("varchar");

       column2.setColumnLen("50");

       column2.setIsPrimaryKey("N");

       column2.setIsNotNull("N");

       //添加列1

       columns.add(column1);

       //添加列2

       columns.add(column2);

       //表实体类

       TableEntity tableEntity = new TableEntity();

       tableEntity.setTableName("testtable");

       tableEntity.setTableComment("测试表");

       tableEntity.setTableColumns(columns);

       tableEntity.setDatabaseName("testdb");

       //输出mysqlSql

       //String mysqlSql = CreateTableHelper.getMysqlSqlByConvertEntity(tableEntity);

       //输出oracelSql

       String oracelSql = CreateTableHelper.getOracleSqlByConvertEntity(tableEntity);

       System.out.println(oracelSql);

   }


3d9c2342b00f41968d2360f38ea8d139.png


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
436 10
|
15天前
|
SQL 关系型数据库 MySQL
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
34 9
|
7天前
|
SQL 容灾 关系型数据库
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
SQL Server 以其卓越的易用性和丰富的软件生态系统,在数据库行业中占据了显著的市场份额。作为一款商业数据库,外部厂商在通过解析原生日志实现增量数据捕获上面临很大的挑战,DTS 在 SQL Sever 数据通道上深研多年,提供了多种模式以实现 SQL Server 增量数据捕获。用户可以通过 DTS 数据传输服务,一键打破自建 SQL Server、RDS SQL Server、Azure、AWS等他云 SQL Server 数据孤岛,实现 SQL Server 数据源的流动。
63 0
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
|
18天前
|
分布式计算 Hadoop 大数据
从Excel到Hadoop:数据规模的进化之路
从Excel到Hadoop:数据规模的进化之路
45 10
|
3月前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
5月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
297 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
|
4月前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
124 4
|
5月前
|
SQL XML Java
excel转sql小工具
该工具用于将Excel数据转换为SQL INSERT语句,便于历史数据迁移到新数据库。通过配置文件定义Excel表头与数据库字段的映射关系,并支持默认值设置及spEL表达式。主要依赖包括EasyExcel读取Excel,以及Lombok、Hutool等辅助工具。项目包含`Excel2SqlUtils.java`和`Excel2SqlListener.java`两个核心类,前者负责加载配置文件,后者实现数据读取与SQL语句生成。配置文件`model.yml`定义了具体的映射规则。
221 1
|
5月前
|
SQL 移动开发 Oracle
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录

热门文章

最新文章