# SQL 转实体类使用教程：粘贴 CREATE TABLE 一键生成 Java/TS/Python 实体代码

> 来源：工具派（https://gjupai.com） 原文页面：https://gjupai.com/tutorial/sql-to-entity-guide

## 工具简介

**SQL 转实体类**是工具派推出的一款面向后端与全栈开发者的代码生成工具：只要把数据库的 `CREATE TABLE` 建表语句粘贴进去，就能自动解析出表名、字段名、字段类型、主键与是否可为空，并一键生成 **Java、TypeScript、Python、Go、C#** 五种语言的实体类 / 接口代码。无论是 MySQL、PostgreSQL、SQL Server 还是 SQLite 的建表语句都可以直接粘贴，支持一次解析多张表、批量生成多个实体。生成过程在浏览器本地完成解析，打开即用、无需安装，还自带一份示例 SQL，新手也能零门槛上手。

## 功能亮点

- **五种目标语言**：同一个 SQL 可生成 Java 实体类、TypeScript 接口（interface）、Python 类、Go 结构体（struct）、C# 实体类，切换下拉框即可实时切换输出语言。
- **智能类型映射**：按 SQL 字段类型自动映射目标语言类型，例如 `BIGINT` → `Long/int64/long`，`DECIMAL` → `BigDecimal/decimal`，`DATETIME/TIMESTAMP` → `Date/time.Time/DateTime/datetime`，`VARCHAR/TEXT` → `String/string/str`，免去手工查表。
- **多表批量解析**：一次性粘贴多个 `CREATE TABLE` 语句，会按顺序生成对应的多个实体类，建库脚本可以直接整段丢进来。
- **识别主键与可空性**：自动识别 `PRIMARY KEY` 和 `NOT NULL` 约束——TypeScript 中可空字段自动加 `?`，Go 中可空字段生成指针类型（如 `*int`），C# 中生成可空类型（如 `int?`）。
- **可选生成注解 / 标签**：勾选后，Java 生成 `@Id`、`@Column(name = "...")` 注解，Go 生成 `gorm:"column:...;primaryKey"` 标签，C# 生成 `[Column("...")]` 特性，直接对接 JPA / GORM / EF Core 等 ORM 框架。
- **自动驼峰 / 帕斯卡命名**：下划线字段名（如 `user_id`、`created_at`）自动转为 `userId`（Java/TS/Python 驼峰）或 `UserId`（Go/C# 帕斯卡），符合各语言命名规范。
- **一键复制与下载**：生成结果可一键复制到剪贴板，也可下载为对应扩展名的源码文件（`.java` / `.ts` / `.py` / `.go` / `.cs`），直接放进项目。

## 参数说明

| 参数 | 说明 | 默认值 / 取值范围 |
| --- | --- | --- |
| SQL 建表语句 | 左侧输入框，粘贴 `CREATE TABLE` 语句，支持多张表批量粘贴，支持 `--` 和 `/* */` 注释 | 默认已载入 users / orders 两张表的示例 SQL |
| 目标语言 | 生成代码的目标语言 | Java（默认）/ TypeScript / Python / Go / C# |
| 生成注解 / 标签 | 勾选后输出 ORM 映射注解：Java 加 `@Id`/`@Column`，Go 加 gorm 标签，C# 加 `[Column]` 特性 | 默认不勾选 |
| 加载示例 | 按钮，将输入框内容重置为内置示例 SQL | 点击生效 |
| 清空 | 按钮，清空输入框、生成结果与错误提示 | 点击生效 |
| 生成实体类 | 主按钮，解析 SQL 并生成实体代码，输入为空时禁用 | 无输入时不可点击 |
| 复制 / 下载 | 结果区按钮，复制到剪贴板或下载为 `entities.<扩展名>` 文件 | 有生成结果后可用 |
| 刷新额度 | 结果区按钮，刷新当前账号的剩余免费额度 | 点击生效 |

## 使用步骤

1. **打开工具页面**：左侧是 SQL 输入区与生成选项，右侧是生成结果区，页面顶部显示工具名称和当前账号的免费额度，登录后即可使用。

![SQL 转实体类主界面：顶部为工具标题与会员横幅，左侧为「SQL 建表语句」输入卡片，内含已载入 users/order](article/202607/1783996876835_4527.png)

2. **粘贴建表语句**：把数据库导出的 `CREATE TABLE` 语句粘贴到左侧「SQL 建表语句」输入框。没有现成语句时，先点右上角「加载示例」看看内置的 users、orders 两张表演示效果；想重来时点「清空」。

3. **选择目标语言**：在「目标语言」下拉框中选择 Java、TypeScript、Python、Go 或 C#，默认是 Java。

4. **按需勾选注解（可选）**：如果项目使用 JPA / MyBatis-Plus、GORM 或 EF Core 等 ORM 框架，勾选「生成注解 / 标签」，生成的代码会带上字段映射注解，省去手工添加；只要纯 POJO / 纯结构体则保持不勾选。

5. **点击「生成实体类」**：工具会校验输入——为空时提示「请输入 SQL 建表语句」，解析不到建表语句时提示「未解析到有效的 CREATE TABLE 语句」；解析成功后右侧结果区立即显示生成的代码，多张表会生成多个实体。

6. **复制或下载结果**：确认结果后点「复制」粘贴到 IDE，或点「下载」得到 `entities.java` / `entities.ts` / `entities.py` / `entities.go` / `entities.cs` 文件，扩展名随目标语言自动匹配。

## 使用技巧

- **整段建库脚本直接粘贴**：解析器会跳过 `PRIMARY KEY(...)`、`KEY`、`INDEX`、`CONSTRAINT`、`FOREIGN KEY` 等约束行，也会自动去掉 `--` 和 `/* */` 注释，所以从数据库工具导出的完整 DDL 脚本可以原样粘贴，无需手工清理。
- **善用类型映射规则**：想让某个字段生成字符串类型，就用 `VARCHAR/TEXT/JSON`；想生成大数用 `BIGINT`，金额用 `DECIMAL` 会自动映射为 `BigDecimal/decimal` 等高精度类型。
- **可空性要标对**：加上 `NOT NULL` 的字段在 TypeScript 中不带 `?`、在 Go/C# 中不生成指针 / 可空类型，所以建表语句的约束写得越规范，生成的实体越贴合业务。
- **Go 项目记得勾选注解**：勾选后会自动生成 `gorm:"column:user_id;primaryKey"` 这样的标签，直接可以被 GORM 识别；同时工具会在用到时间类型时自动补上 `import "time"`。
- **C# 项目同理**：勾选注解后会自动添加 `using System.ComponentModel.DataAnnotations.Schema;` 引用，用到 `DateTime` 时也会自动补 `using System;`，生成的文件基本可以直接编译。
- **字段命名用下划线风格**：工具会把 `created_at` 这类 snake_case 字段自动转成各语言惯例的命名（`createdAt` / `CreatedAt`），所以数据库保持下划线命名即可，不需要为了代码风格改库表设计。

## 常见问题

**Q1：支持哪些数据库的建表语句？**
只要符合标准 `CREATE TABLE 表名 (...)` 语法即可，MySQL、PostgreSQL、SQL Server、SQLite 的常用写法都支持，包括带反引号 / 引号的表名和字段名、`IF NOT EXISTS`、`ENGINE`、`CHARSET`、`COMMENT` 等后缀。

**Q2：为什么有些字段没有出现在生成结果里？**
以 `PRIMARY KEY(...)`、`UNIQUE(`、`KEY`、`INDEX`、`CONSTRAINT`、`FOREIGN KEY` 开头的约束行会被当作表级约束跳过，这是正常行为；如果某个普通字段也没解析出来，检查它是否是 `字段名 类型` 的标准格式（类型可带括号，如 `VARCHAR(64)`）。

**Q3：生成的 Java 类为什么没有 getter/setter？**
生成结果中字段后附有 `// getters and setters...` 占位注释，具体方法建议用 IDE（如 IntelliJ 的 Generate）或 Lombok 的 `@Data` 注解自动生成，比工具硬编码更灵活。

**Q4：SQL 里的注释会影响生成吗？**
不会。解析前会自动移除 `--` 单行注释和 `/* */` 块注释，带注释的建表脚本可以直接粘贴。

**Q5：可以一次生成多张表的实体吗？**
可以。粘贴多个 `CREATE TABLE` 语句，工具会依次解析并生成多个实体类，按表顺序拼接在同一份输出里，复制或下载一次即可全部带走。

**Q6：下载的文件名为什么是 entities.xxx 而不是表名？**
下载时按目标语言统一命名为 `entities.java` / `entities.ts` / `entities.py` / `entities.go` / `entities.cs`，下载后可以自行重命名或按类名拆分成多个文件。

