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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
4月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
简介:本文整理自阿里云高级技术专家李麟在Flink Forward Asia 2025新加坡站的分享,介绍了Flink 2.1 SQL在实时数据处理与AI融合方面的关键进展,包括AI函数集成、Join优化及未来发展方向,助力构建高效实时AI管道。
798 43
|
4月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
本文整理自阿里云的高级技术专家、Apache Flink PMC 成员李麟老师在 Flink Forward Asia 2025 新加坡[1]站 —— 实时 AI 专场中的分享。将带来关于 Flink 2.1 版本中 SQL 在实时数据处理和 AI 方面进展的话题。
289 0
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
|
5月前
|
SQL
SQL如何只让特定列中只显示一行数据
SQL如何只让特定列中只显示一行数据
|
5月前
|
Python
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
5月前
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
|
7月前
|
存储 安全 大数据
网安工程师必看!AiPy解决fscan扫描数据整理难题—多种信息快速分拣+Excel结构化存储方案
作为一名安全测试工程师,分析fscan扫描结果曾是繁琐的手动活:从海量日志中提取开放端口、漏洞信息和主机数据,耗时又易错。但现在,借助AiPy开发的GUI解析工具,只需喝杯奶茶的时间,即可将[PORT]、[SERVICE]、[VULN]、[HOST]等关键信息智能分类,并生成三份清晰的Excel报表。告别手动整理,大幅提升效率!在安全行业,工具党正碾压手动党。掌握AiPy,把时间留给真正的攻防实战!官网链接:https://www.aipyaipy.com,解锁更多用法!
|
9月前
|
SQL 自然语言处理 数据库
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。
228 4
|
5月前
|
Python
将Excel特定某列数据删除
将Excel特定某列数据删除