MySQL DDL 转代码
解析 CREATE TABLE(列名、类型、长度、NOT NULL、DEFAULT、AUTO_INCREMENT、PRIMARY KEY、COMMENT、UNSIGNED),生成 Java Bean(可选 Lombok / JPA 注解)、TypeScript interface、Go struct 或 C# class,并附类型映射表;解析失败给出行号与原因。
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
类型映射表
生成代码时使用的映射;BIGINT 在 Java 里是 Long,使用基本类型选项后是 long
| MySQL | Java | Java 基本类型 | TypeScript | Go | C# | 说明 |
|---|---|---|---|---|---|---|
| TINYINT | Byte | byte | number | int8 | sbyte | TINYINT(1) 视为布尔 |
| SMALLINT | Short | short | number | int16 | short | |
| MEDIUMINT | Integer | int | number | int32 | int | |
| INT | Integer | int | number | int32 | int | |
| INTEGER | Integer | int | number | int32 | int | |
| BIGINT | Long | long | number | int64 | long | |
| FLOAT | Float | float | number | float32 | float | |
| DOUBLE | Double | double | number | float64 | double | |
| DECIMAL | BigDecimal | BigDecimal | string | string | decimal | 用字符串避免精度丢失 |
| NUMERIC | BigDecimal | BigDecimal | string | string | decimal | |
| BIT | Boolean | boolean | boolean | bool | bool | |
| BOOL | Boolean | boolean | boolean | bool | bool | |
| BOOLEAN | Boolean | boolean | boolean | bool | bool | |
| CHAR | String | String | string | string | string | |
| VARCHAR | String | String | string | string | string | |
| TINYTEXT | String | String | string | string | string | |
| TEXT | String | String | string | string | string | |
| MEDIUMTEXT | String | String | string | string | string | |
| LONGTEXT | String | String | string | string | string | |
| JSON | String | String | string | string | string | |
| ENUM | String | String | string | string | string | |
| SET | String | String | string | string | string | |
| UUID | String | String | string | string | string | |
| BINARY | byte[] | byte[] | Uint8Array | []byte | byte[] | |
| VARBINARY | byte[] | byte[] | Uint8Array | []byte | byte[] | |
| TINYBLOB | byte[] | byte[] | Uint8Array | []byte | byte[] | |
| BLOB | byte[] | byte[] | Uint8Array | []byte | byte[] | |
| MEDIUMBLOB | byte[] | byte[] | Uint8Array | []byte | byte[] | |
| LONGBLOB | byte[] | byte[] | Uint8Array | []byte | byte[] | |
| DATE | LocalDate | LocalDate | string | time.Time | DateOnly | |
| TIME | LocalTime | LocalTime | string | string | TimeSpan | |
| DATETIME | LocalDateTime | LocalDateTime | string | time.Time | DateTime | |
| TIMESTAMP | LocalDateTime | LocalDateTime | string | time.Time | DateTime | |
| YEAR | Integer | int | number | int32 | int |
这个工具能做什么
- 搭新项目时省掉手写 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建表语句代码生成