ddl-to-object: 一个工具,帮助从
SQL DDL
文件生成不同语言的相关类文件。
- 仅针对 MySQL/MariaDB DDL SQL 进行了测试。
欢迎 PR !您可以做一些编码工作来让它支持另一种(编程)语言。
- java: 生成实体类,对属性自动转换(数据库中蛇形
snake_style
字段)到驼峰camelStyle
风格,引入注释,并使用 lombok 插件减少getter/setter
等代码、并支持包目录; - golang: 生成带有标签
tag
和注释comment
的结构体; - php: 生成带有命名空间和注释支持的简单类;
- python: 生成带有注释的简单类;
- 想要其它编程语言支持?:
Pull Request
是欢迎的。
- 在 MySQL DDL 中使用良好的涉及模式,例如使用单数名词作为表名和列名,以蛇形
snake_case
样式命名、更多的注释、不要使用表前缀和表有主键等。 - 剩下地,就是使用这个工具帮你生成目标语言类文件。
下载目标操作系统 ZIP 压缩文件,解压它,把二进制文件(即 ddl-to-object
或 ddl-to-object.exe
)移动到 /usr/local/bin/
或其它可自动加载的环境变量路径下。
默认情况下,您需要复制项目 template
文件到 ~/.dto/template
目录下(注:~
代表当前用户家目录)。
然后您即可从任何位置在终端 terminal
运行它。从它打印帮助或下文中获取帮助。
ddl-to-object go generate golang target object file
ddl-to-object java generate java target object file
ddl-to-object php generate php target object file
ddl-to-object python generate python target object file
-f, --from path from path which a single-table DDL file located
-n, --ns namespace namespace name for php, only in php command (default "App\\Models")
-p, --pk package package name, only in java or go command (default "com.example.sample.domain.entity")
-s, --stdout enable stdout or not, default set false to disable
-t, --to path output to target path or location, create directory automatically if it not existed
$ ddl-to-object php -f ./output/samples/example_3.ddl.txt -n Modules\\Blog\\Models -t ./output/php/
$ ddl-to-object java -f ./output/samples/example_2.ddl.txt -p com.douyasi.sample.domain.entity -t ./output/java/
$ ddl-to-object go -f ./output/sampls/example_3.ddl.txt -p models -t ./output/go/
查看 output 文件夹。
如安装那节所说,默认模板 template
文件位于 ~/.dto/template
目录下(注:代表当前用户家目录;如果它们不存在,您需要手动复制它们到此位置)。
模板是个纯文本,使用到 golang text/template , ParsedResult
类型的结构体会被传入。你可以根据自己的能力来修改它们。
- 在单行 DDL SQL 中不能正常工作;
- 在 DDL SQL 中的使用混杂(命名)风格(如蛇形
snake_style
、驼峰camelStyle
、帕斯卡式PascalStyle
和其他情况)的,不能很好地工作; - 特殊的表或字段名,如
365Days_table
、1st_field
和biz.error.code.field
等; - 某些 MySQL 数据类型可能无法很好地映射成(合适的) Java 或 Golang 数据类型;
- Java 和 Golang 中会有一些未使用的引用(包名),您可以自行清理它们或使用诸如
gofmt
之类的工具; - 缺少一些特殊测试用例。