10

mysql 数据库转换为golang结构

 4 years ago
source link: https://studygolang.com/articles/27187
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

gormt

一款 mysql 数据库转 struct 工具

交互界面模式

Era2auZ.gif

./gormt -g=true

命令行模式

J3IvMjU.gif

./gormt -g=false

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

base:
    is_dev : false
out_dir : ./model  # 输出目录
url_tag : json # web url tag(json,db(https://github.com/google/go-querystring))
language :  # 语言(English,中 文)
db_tag : gorm # 数据库标签(gorm,db)
singular_table : false  # 单表模式:true:禁用表名复数,false:采用表明复数 参考:gorm.SingularTable
simple : false # 简单输出(默认gorm标签不输出)
is_out_sql : false # 是否输出 sql 原信息
is_out_func : true # 是否输出 快捷函数
is_web_tag : true # 是否打web标记
is_foreign_key : true # 是否导出外键关联
is_gui : false # 是否ui模式显示
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   数据库名
  -f, --foreign           是否导出外键关联
  -F, --fun               是否导出函数
  -g, --gui               是否ui显示模式
  -h, --help              help for main
  -H, --host string       数据库地址.(注意-H为大写)
  -o, --outdir string     输出目录
  -p, --password string   密码.
      --port int          端口号 (default 3306)
  -s, --singular          是否禁用表名复数
  -l, --url string        url标签(json,url)
  -u, --user string       用户名.

4. 支持gorm 相关属性

  • 数据库表,列字段注释支持
  • singular_table 表名复数(大驼峰)
  • json tag json标签输出
  • gorm.Model 基本模型 支持gorm.Model模式导出>>>
  • PRIMARY_KEY 将列指定为主键
  • UNIQUE 将列指定为唯一
  • NOT NULL 将列指定为非 NULL
  • INDEX 创建具有或不带名称的索引, 如果多个索引同名则创建复合索引
  • UNIQUE_INDEX 和 INDEX 类似,只不过创建的是唯一索引
  • 支持外键相关属性 简单带外键模式导出>>>
  • 支持函数导出(包括:外键,关联体,索引关...) 简单函数导出示例>>>

5. 示例展示

--->导出结果示例

  • 参数:singular_table = false simple = false isJsonTag = true
//	用户信息
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"`                                                        //
}
  • 参数:singular_table = false simple = true isJsonTag = false

--->导出结果

//	用户信息
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 可视化工具

vMj6zqV.jpg!web

下载地址


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK