跳到主内容
UniKit

MySQL DDL 转代码

解析 CREATE TABLE(列名、类型、长度、NOT NULL、DEFAULT、AUTO_INCREMENT、PRIMARY KEY、COMMENT、UNSIGNED),生成 Java Bean(可选 Lombok / JPA 注解)、TypeScript interface、Go struct 或 C# class,并附类型映射表;解析失败给出行号与原因。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

Java 选项

类型映射表

生成代码时使用的映射;BIGINT 在 Java 里是 Long,使用基本类型选项后是 long

MySQLJavaJava 基本类型TypeScriptGoC#说明
TINYINTBytebytenumberint8sbyteTINYINT(1) 视为布尔
SMALLINTShortshortnumberint16short
MEDIUMINTIntegerintnumberint32int
INTIntegerintnumberint32int
INTEGERIntegerintnumberint32int
BIGINTLonglongnumberint64long
FLOATFloatfloatnumberfloat32float
DOUBLEDoubledoublenumberfloat64double
DECIMALBigDecimalBigDecimalstringstringdecimal用字符串避免精度丢失
NUMERICBigDecimalBigDecimalstringstringdecimal
BITBooleanbooleanbooleanboolbool
BOOLBooleanbooleanbooleanboolbool
BOOLEANBooleanbooleanbooleanboolbool
CHARStringStringstringstringstring
VARCHARStringStringstringstringstring
TINYTEXTStringStringstringstringstring
TEXTStringStringstringstringstring
MEDIUMTEXTStringStringstringstringstring
LONGTEXTStringStringstringstringstring
JSONStringStringstringstringstring
ENUMStringStringstringstringstring
SETStringStringstringstringstring
UUIDStringStringstringstringstring
BINARYbyte[]byte[]Uint8Array[]bytebyte[]
VARBINARYbyte[]byte[]Uint8Array[]bytebyte[]
TINYBLOBbyte[]byte[]Uint8Array[]bytebyte[]
BLOBbyte[]byte[]Uint8Array[]bytebyte[]
MEDIUMBLOBbyte[]byte[]Uint8Array[]bytebyte[]
LONGBLOBbyte[]byte[]Uint8Array[]bytebyte[]
DATELocalDateLocalDatestringtime.TimeDateOnly
TIMELocalTimeLocalTimestringstringTimeSpan
DATETIMELocalDateTimeLocalDateTimestringtime.TimeDateTime
TIMESTAMPLocalDateTimeLocalDateTimestringtime.TimeDateTime
YEARIntegerintnumberint32int

这个工具能做什么

  • 搭新项目时省掉手写 POJO:把建表语句整段粘进来,一次生成 Java Bean、TypeScript interface、Go struct 或 C# class,字段名自动转驼峰。
  • 做个类型映射的参考:表里的 MySQL → Java / TS / Go / C# 映射一目了然,讨论「DECIMAL 到底该映射成 BigDecimal 还是 string」时直接截图就行。
  • 配合 Lombok 或 JPA 的工程:勾上 @Data 或 jakarta.persistence 注解,生成直接可用带 @Id、@GeneratedValue、@Column 的实体类骨架。
  • 排查 DDL 写错的地方:解析失败会给出「第几行:原因」,例如列名重复、括号没闭合、不认识的约束写法,比数据库报错更直观。

示例

输入

CREATE TABLE `t_user` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  `nickname` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '昵称',
  `balance` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_nickname` (`nickname`)
) ENGINE=InnoDB COMMENT='用户';

输出

package com.example.demo;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Data;

/**
 * 用户
 */
@Data
public class TUser {
    /**
     * 主键 AUTO_INCREMENT
     */
    private Long id;

    /**
     * 昵称
     */
    private String nickname;

    private BigDecimal balance;

    private LocalDateTime createdAt;
}

类名默认由表名转大驼峰(t_user → TUser,不会自动去掉 t_ 前缀,可以在「去掉表名前缀」里填 t_);Lombok 默认勾选,所以有 @Data 和 import lombok.Data。

常见问题

表名 t_user 生成的是 TUser,怎么变成 User?

在「去掉表名前缀」里填 t_,生成前会先剥掉这段前缀再转大驼峰。也可以直接在「类名 / 结构体名」里写死想要的类名,优先级最高。

DECIMAL 为什么在 TypeScript 里是 string?

DECIMAL / NUMERIC 需要十进制精度,映射成 JS 的 number 会丢精度(0.1 + 0.2 那类问题),所以 TS 和 Go 都用 string 承载,Java 用 BigDecimal,C# 用 decimal。

TINYINT 会生成 byte 还是 bool?

看长度:TINYINT(1) 按布尔处理(Java 是 Boolean,TS 是 boolean,Go 是 bool),其它 TINYINT 按整数处理(Java 是 Byte,Base 表里也标了这一点)。没有列长度的 TINYINT 会走整数映射。

建表语句里写了 CHECK、FULLTEXT 或外键为什么报错?

这个解析器只支持列定义加 PRIMARY KEY / UNIQUE KEY / KEY 这几类片段,遇到 CHECK 约束、FULLTEXT 索引或 FOREIGN KEY 会报「无法识别的定义片段」。把它们删掉再解析即可,不影响字段和主键的生成。

生成的代码会带上数据库里的注释和默认值吗?

列注释会写进 Javadoc / 文档注释,自增和枚举候选值也会附在注释里;默认值目前只用于解析,不写进生成结果。建表语句同样只在本机解析,不会上传。

关键词:mysqlddlcreate tablejavabeanpojotypescriptgolangcsharplombokjpa建表语句代码生成

同类工具