根据Java的数据库实体类输出建表SQL

数据库实体类

java 复制代码
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 分子公司基本信息变更代办
 *
 * @version 1.0
 * @date 2023/11/21 01:01
 */
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("ent_change_todo")
public class EntChangeTodoDO extends BaseDO {


    /**
     * id
     */
    private Integer id;

    /**
     * 分子公司类型 (1-分公司,2-子公司)
     */
    private Integer companyType;

    /**
     * 企业id
     */
    private Long enterpriseId;

    /**
     * 公司名字
     */
    private String companyName;

    /**
     * 企业类别
     */
    private String companyCate;

    /**
     * 负责人或法人
     */
    private String director;

    /**
     * 变更项json
     */
    private String changeItemsJson;

    /**
     * 待办人部门名
     */
    private String todoDeptName;

    /**
     * 待办人id
     */
    private Long todoUserId;

    /**
     * 待办人名字
     */
    private String todoUserName;

    /**
     * 待办状态(0-待处理, 1-同意(完成);2-驳回发起人;3-撤销)
     */
    private Integer state;

    /**
     * 待办业务key
     */
    private String todoKey;

    /**
     * 审批意见
     */
    private String approvalComment;

}

工具类

java 复制代码
import com.google.common.base.CaseFormat;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.util.StreamUtils;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @version 1.0
 * @date 2023/11/29 16:31
 */
public class Entity2SQLTest2 {
    Pattern fieldPattern = Pattern.compile("/\\**\\n\\s+\\*(\\s*(.+))\\n\\s+\\*/\\n\\s+\\w+\\s+(\\w+)\\s+(\\w+);");
    Pattern tableNamePattern = Pattern.compile("TableName\\(\"(\\w+)\"\\)");

    @Test
    public void testSQL() {
        String result = entity2SQL("tes.txt");
        System.out.println(result);
    }

    private String entity2SQL(String entityClassPath) {
        Resource resource = new ClassPathResource(entityClassPath);
        String entityClassStr;
        try {
            InputStream inputStream = resource.getInputStream();
            entityClassStr = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
        } catch (IOException e) {
            throw new IllegalStateException();
        }
        Matcher matcherTable = tableNamePattern.matcher(entityClassStr);
        StringBuilder sqlBuilder = new StringBuilder("CREATE TABLE  ");
        while (matcherTable.find()) {
            String tableName = matcherTable.group(1);
            sqlBuilder.append('`').append(tableName).append('`').append(" (\n");
        }
        Matcher matcher = fieldPattern.matcher(entityClassStr);

        while (matcher.find()) {
            String comment = matcher.group(2);
            String type = matcher.group(3);
            String fieldName = matcher.group(4);
            String sqlField = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, fieldName);
            if (sqlField.equals("id")) {
                sqlBuilder.append("`id` BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键id',\n");
                continue;
            }
            sqlBuilder.append('`').append(sqlField).append('`');
            if ("Integer".equals(type)) {
                sqlBuilder.append(" INT ");
            }
            if ("Long".equals(type)) {
                sqlBuilder.append(" BIGINT ");
            }
            if ("String".equals(type)) {
                sqlBuilder.append(" VARCHAR(128) ");
            }
            if ("LocalDate".equals(type)) {
                sqlBuilder.append(" DATE ");
            }
            if ("LocalDateTime".equals(type) || "Date".equals(type)) {
                sqlBuilder.append(" DATETIME ");
            }
            if ("LocalTime".equals(type)) {
                sqlBuilder.append(" TIME ");
            }
            if ("Boolean".equals(type) || "boolean".equals(type)) {
                sqlBuilder.append(" TINYINT ");
            }

            sqlBuilder.append("DEFAULT NULL");
            sqlBuilder.append(" COMMENT ").append('\'').append(comment).append("',\n");

        }
        int startDel = sqlBuilder.length() - 2;
        int endDel = sqlBuilder.length();
        sqlBuilder.delete(startDel, endDel);
        sqlBuilder.append(");");


        return sqlBuilder.toString();


    }
}

输出结果

sql 复制代码
CREATE TABLE  `ent_change_todo` (
`id` BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键id',
`company_type` INT DEFAULT NULL COMMENT '分子公司类型 (1-分公司,2-子公司)',
`enterprise_id` BIGINT DEFAULT NULL COMMENT '企业id',
`company_name` VARCHAR(128) DEFAULT NULL COMMENT '公司名字',
`company_cate` VARCHAR(128) DEFAULT NULL COMMENT '企业类别',
`director` VARCHAR(128) DEFAULT NULL COMMENT '负责人或法人',
`change_items_json` VARCHAR(128) DEFAULT NULL COMMENT '变更项json',
`todo_dept_name` VARCHAR(128) DEFAULT NULL COMMENT '待办人部门名',
`todo_user_id` BIGINT DEFAULT NULL COMMENT '待办人id',
`todo_user_name` VARCHAR(128) DEFAULT NULL COMMENT '待办人名字',
`state` INT DEFAULT NULL COMMENT '待办状态(0-待处理, 1-同意(完成);2-驳回发起人;3-撤销)',
`todo_key` VARCHAR(128) DEFAULT NULL COMMENT '待办业务key',
`approval_comment` VARCHAR(128) DEFAULT NULL COMMENT '审批意见');
相关推荐
2301_8092047031 分钟前
JavaScript中严格模式use-strict对引擎解析的辅助.txt
jvm·数据库·python
zjy277771 小时前
mysql如何选择合适的索引类型_mysql索引设计实战
jvm·数据库·python
Aaswk1 小时前
Java Lambda 表达式与流处理
java·开发语言·python
是宇写的啊1 小时前
Spring AOP
java·spring
笨蛋不要掉眼泪1 小时前
Mysql架构揭秘:update语句的执行流程
数据库·mysql·架构
万邦科技Lafite1 小时前
京东item_get接口实战案例:实时商品价格监控全流程解析
java·开发语言·数据库·python·开放api·淘宝开放平台
秋92 小时前
ruoyi项目更换为mysql9.7.0数据库
数据库
Andya_net2 小时前
MySQL | MySQL 8.0 权限管理实践-精确赋予库、表只读等权限
android·数据库·mysql
Mr_pyx2 小时前
Spring AI 入门教程:Java开发者的AI应用捷径
java·人工智能·spring
Zephyr_03 小时前
Leedcode算法题
java·算法