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

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


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
数据采集 存储 数据挖掘
使用Python读取Excel数据
本文介绍了如何使用Python的`pandas`库读取和操作Excel文件。首先,需要安装`pandas`和`openpyxl`库。接着,通过`read_excel`函数读取Excel数据,并展示了读取特定工作表、查看数据以及计算平均值等操作。此外,还介绍了选择特定列、筛选数据和数据清洗等常用操作。`pandas`是一个强大且易用的工具,适用于日常数据处理工作。
|
5天前
|
SQL 安全 数据处理
揭秘数据脱敏神器:Flink SQL的神秘力量,守护你的数据宝藏!
【9月更文挑战第7天】在大数据时代,数据管理和处理尤为重要,尤其在保障数据安全与隐私方面。本文探讨如何利用Flink SQL实现数据脱敏,为实时数据处理提供有效的隐私保护方案。数据脱敏涉及在处理、存储或传输前对敏感数据进行加密、遮蔽或替换,以遵守数据保护法规(如GDPR)。Flink SQL通过内置函数和表达式支持这一过程。
23 2
|
11天前
|
SQL 存储 数据库
SQL Server 中的备份类型详解
【8月更文挑战第31天】
21 0
|
11天前
|
Java 网络架构 数据格式
Struts 2 携手 RESTful:颠覆传统,重塑Web服务新纪元的史诗级组合!
【8月更文挑战第31天】《Struts 2 与 RESTful 设计:构建现代 Web 服务》介绍如何结合 Struts 2 框架与 RESTful 设计理念,构建高效、可扩展的 Web 服务。Struts 2 的 REST 插件提供简洁的 API 和约定,使开发者能快速创建符合 REST 规范的服务接口。通过在 `struts.xml` 中配置 `&lt;rest&gt;` 命名空间并使用注解如 `@Action`、`@GET` 等,可轻松定义服务路径及 HTTP 方法。
27 0
|
11天前
|
测试技术 Java
全面保障Struts 2应用质量:掌握单元测试与集成测试的关键策略
【8月更文挑战第31天】Struts 2 的测试策略结合了单元测试与集成测试。单元测试聚焦于单个组件(如 Action 类)的功能验证,常用 Mockito 模拟依赖项;集成测试则关注组件间的交互,利用 Cactus 等框架确保框架拦截器和 Action 映射等按预期工作。通过确保高测试覆盖率并定期更新测试用例,可以提升应用的整体稳定性和质量。
21 0
|
11天前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
28 0
|
11天前
|
Java 测试技术 容器
从零到英雄:Struts 2 最佳实践——你的Web应用开发超级变身指南!
【8月更文挑战第31天】《Struts 2 最佳实践:从设计到部署的全流程指南》深入介绍如何利用 Struts 2 框架从项目设计到部署的全流程。从初始化配置到采用 MVC 设计模式,再到性能优化与测试,本书详细讲解了如何构建高效、稳定的 Web 应用。通过最佳实践和代码示例,帮助读者掌握 Struts 2 的核心功能,并确保应用的安全性和可维护性。无论是在项目初期还是后期运维,本书都是不可或缺的参考指南。
20 0
|
30天前
|
数据可视化 Python
我是如何把python获取到的数据写入Excel的?
我是如何把python获取到的数据写入Excel的?
33 2
|
19天前
|
关系型数据库 MySQL Shell
不通过navicat工具怎么把查询数据导出到excel表中
不通过navicat工具怎么把查询数据导出到excel表中
24 0