golang 将数据库转换为 gorm 结构

2020-01-13 16:05:43 +08:00
 xxjwxc

gormt

一款 mysql 数据库转 struct 工具

1. 通过当前目录 config.toml 文件配置默认配置项

out_dir : "."  # 输出目录
singular_table : false  # 表名复数,是否大驼峰构建 参考:gorm.SingularTable
simple : false #简单输出
is_out_sql : false # 是否输出 sql 原信息
is_out_func : true # 是否输出 快捷函数
is_json_tag : false #是否打 json 标记
is_foreign_key : true #是否导出外键关联
mysql_info :
    host : "127.0.0.1"
    port : 3306
    username : "root"
    password : "qwer"
    database : "oauth_db"

2. 可以使用命令行工具更新配置项

./gormt -H=127.0.0.1 -d=oauth_db -p=qwer -u=root --port=3306

3. 查看帮助

./gormt -h

-------------------------------------------------------
base on gorm tools for mysql database to golang struct

Usage:
  main [flags]

Flags:
  -d, --database string   数据库名
  -h, --help              help for main
  -H, --host string       数据库地址.(注意-H 为大写)
  -o, --outdir string     输出目录
  -p, --password string   密码.
      --port int          端口号 (default 3306)
  -s, --singular          是否禁用表名复数
  -u, --user string       用户名.
  

4. 支持 gorm 相关属性

5. 示例展示

--->导出结果示例
//	用户信息
type UserAccountTbl struct {
	ID          int       `gorm:"primary_key;column:id;type:int(11);not null" json:"-"`                                                   //
	Account     string    `gorm:"unique;column:account;type:varchar(64);not null" json:"account"`                                         //
	Password    string    `gorm:"column:password;type:varchar(64);not null" json:"password"`                                              //
	AccountType int       `gorm:"column:account_type;type:int(11);not null" json:"account_type"`                                          //	帐号类型:0 手机号,1 邮件
	AppKey      string    `json:"app_key" gorm:"unique_index:UNIQ_5696AD037D3656A4;column:app_key;type:varchar(255);not null"`            //	authbucket_oauth2_client 表的 id
	UserInfoID  int       `gorm:"unique_index:UNIQ_5696AD037D3656A4;index;column:user_info_id;type:int(11);not null" json:"user_info_id"` //
	RegTime     time.Time `gorm:"column:reg_time;type:datetime" json:"reg_time"`                                                          //
	RegIP       string    `gorm:"column:reg_ip;type:varchar(15)" json:"reg_ip"`                                                           //
	BundleID    string    `json:"bundle_id" gorm:"column:bundle_id;type:varchar(255)"`                                                    //
	Describ     string    `gorm:"column:describ;type:varchar(255)" json:"describ"`                                                        //
}
--->导出结果
//	用户信息
type UserAccountTbl struct {
	ID          int       `gorm:"primary_key"` //
	Account     string    `gorm:"unique"`      //
	Password    string    //
	AccountType int       //	帐号类型:0 手机号,1 邮件
	AppKey      string    `gorm:"unique_index:UNIQ_5696AD037D3656A4"`       //	authbucket_oauth2_client 表的 id
	UserInfoID  int       `gorm:"unique_index:UNIQ_5696AD037D3656A4;index"` //
	RegTime     time.Time //
	RegIP       string    //
	BundleID    string    //
	Describ     string    //
}

更多>>>

6. 支持函数导出(导出函数只是 gorm 的辅助类函数,完全兼容 gorm 相关函数集)

// FetchByPrimaryKey primay or index 获取唯一内容
func (obj *_UserAccountTblMgr) FetchByPrimaryKey(ID int) (result UserAccountTbl, err error) {
	err = obj.DB.Table(obj.GetTableName()).Where("id = ?", ID).Find(&result).Error
	if err == nil && obj.isRelated {
		{
			var info UserInfoTbl // 用户信息
			err = obj.DB.Table("user_info_tbl").Where("id = ?", result.UserInfoTblID).Find(&info).Error
			if err != nil {
				return
			}
			result.UserInfoTbl = info
		}
	}

	return
}

更多>>>

函数调用示例>>>

7. 构建

make windows
make linux
make mac

or

go generate

8. 下一步计划

9. 提供一个 windows 可视化工具

下载地址

4497 次点击
所在节点    Go 编程语言
9 条回复
littlewing
2020-01-13 17:46:39 +08:00
手动点赞,之前用过一个 chrome 插件,现在找不着了
xxjwxc
2020-01-13 18:07:03 +08:00
😝,这个工具是对 gorm 深度定制的。包括函数导出(索引,外键,主键),接头体外键支持,gorm 标签。json 标签。
sun522198558
2020-01-13 18:10:05 +08:00
貌似很早就点赞了
xxjwxc
2020-01-13 18:12:40 +08:00
@sun522198558 谢谢,因为最近更新了很多很实用的功能。所以又推广一波。
sun522198558
2020-01-13 18:13:11 +08:00
@xie1xiao1jun #4 大佬牛逼
xxjwxc
2020-01-13 18:24:21 +08:00
@sun522198558

这次主要添加了快捷功能函数导出功能。函数请看:
https://github.com/xxjwxc/gormt/blob/master/data/view/genfunc/genfunc_test.go

绝对开发中非常实用且方便。

索引,外键都自动构建函数出来。直接使用。

last : 不是大佬,只是为了社区做一点点贡献。
DelayNoMore
2020-01-18 02:52:25 +08:00
牛啊,我有个 table 接近 60 个字段
xxjwxc
2020-01-18 16:04:13 +08:00
@DelayNoMore 😝,省掉很多手工。这两天在做交互界面
tairan2006
2020-02-06 11:04:52 +08:00
老哥,建议不要做 windows 的可视化工具,而是 goland 的插件。

在 goland 的 database 里右键直接生产 gorm model,做出来我就买:)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/637538

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX