Skip to content
This repository has been archived by the owner on Oct 29, 2022. It is now read-only.

app: generate golang struct source code for mysql

Notifications You must be signed in to change notification settings

axiaoxin-com/table2struct

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

table2struct

GitHub All Releases

Forked from: https://github.com/jiazhoulvke/table2struct

更新特性:

  • 支持 MySQL 8.0
  • 支持 Struct 中的 JSON tag 的命名风格设置
  • 注释符号后面添加空格
  • 修复 db 中存在视图时无法生成代码的问题
  • 修复存在 enum 类型的字段无法生成代码的问题
  • 修复表名中存在 . 无法生成代码的问题

安装

go get github.com/axiaoxin-com/table2struct

使用说明

table2struct --tag_gorm --tag_sqlx --db_host localhost --db_port 3306 --db_user root --db_pwd pwd --db_name db [tablename]

基本应用

先来看看 table2struct 支持的参数:

Usage of table2struct:
      --db_host string        数据库ip地址 (default "127.0.0.1")
      --db_name string        数据库名
      --db_port int           数据库端口 (default 3306)
      --db_pwd string         数据库密码 (default "root")
      --db_user string        数据库用户名 (default "root")
      --int64                 是否将tinyint、smallint等类型也转换int64
      --mapping strings       强制将字段名转换成指定的名称。如--mapping foo:Bar,则表中叫foo的字段在golang中会强制命名为Bar
      --mapping_file string   字段名映射文件
      --output string         输出路径,默认为当前目录
      --package_name string   包名 (default "models")
      --query string          查询数据库字段名转换后的golang字段名并立即退出
      --skip_if_no_prefix     当表名不包含指定前缀时跳过不处理
      --table_prefix string   表名前缀
      --tag_gorm              是否生成gorm的tag
      --tag_gorm_type         是否将type包含进gorm的tag (default true)
      --tag_json              是否生成json的tag (default true)
      --tag_json_case         指定JSON tag中字段的命名风格(snake:下划线风格,camel:大驼峰,lowcamel:小驼峰),默认为db中的原始字段
      --tag_sqlx              是否生成sqlx的tag
      --tag_xorm              是否生成xorm的tag
      --tag_xorm_type         是否将type包含进xorm的tag (default true)

命令最后可以加表名来指定导出某些表,不加导出全部

比如你有一个名叫 mydatabase 的数据库,里面有一个 user 表:

CREATE TABLE `user` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `email` varchar(255) DEFAULT NULL,
  `age` int(10) unsigned DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  `status` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

通过运行table2struct --db_name mydatabase user就可以生成一个 user.go 文件:

package models

// User user
type User struct {
	ID       int    `json:"id"`
	Username string `json:"username"`
	Password string `json:"password"`
	Email    string `json:"email"`
	Age      uint   `json:"age"`
	Address  string `json:"address"`
	Status   int8   `json:"status"`
}

// TableName user
func (t *User) TableName() string {
	return "user"
}

介绍几个需要注意的参数:

  • --int64 强制把所有整型字段全部声明为 int64,比如上面示例中的 Status 为Status int8,加入参数--int64=true 后,生成的字段就会是Status int64
  • --tag_json 默认启用,会在 struct 的 tag 里增加json:"字段名"
  • 同理,--tag_sqlx--tag_xorm--tag_gorm可以分别生成对应框架需要的 tag

转换结果查询

假如你还不想真正生成字段,只是想预览一下数据库里的字段会变成什么名字,就可以用table2struct --query [表名.]字段名 进行查询,比如:

$ table2struct --query table1.foo

table1.foo => table1.Foo

字段映射

有时对于一些自动转换的字段名不满意,比如 user 表中有一个 username 字段,自动转换出来的将会是 Username,但我想要它转成 UserName,那该怎么办呢?这时就可以通过--mapping参数来强制将 username 转换成 UserName。

$ table2struct --mapping username:UserName --query username

username => UserName

--mapping 这个参数是可以无限制的增加的,也就是说你可以这样:

table2struct --mapping foo1:foo2 --mapping bar1:bar2 --mapping baz1:baz2

左边的字段是可以带上表名的,比如这样:

$ table2struct --mapping table1.foo1:foo2 --query foo1

table1.foo1 = table1.Foo1

$ table2struct --mapping table1.foo1:foo2 --query table1.foo1

table1.foo1 => table1.foo2

假如需要映射的字段名很多的话,放在一个文件里显然更合适一点,这时就可以用--mapping_file这个参数了:

$ cat mapping.txt

foo:bar

$ table2struct --mapping_file mapping.txt --query foo

foo => bar

处理前缀

有时我们的表名都带有统一的前缀,比如:

google_table1 google_table2 google_table3

这时生成的文件名是 google_table1.go,结构名是 GoogleTable1。然而我们需要它生成的文件名是 table1.go,结构名是 Table1,这时就可以用到--table_prefix这个参数了

$ table2struct --table_prefix google_

About

app: generate golang struct source code for mysql

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 100.0%