项目地址 https://github.com/qmhball/db2gorm
根据数据库表生成gorm需要的struct。支持指定单表生成,也可以全库生成。
比如有如下数据表:
Table: User
Create Table: CREATE TABLE `User` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL,
`age` int(11) NOT NULL DEFAULT '-1',
`is_admin` tinyint(1) NOT NULL DEFAULT '0',
`is_valid` tinyint(1) NOT NULL DEFAULT '1',
`login_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8 COMMENT='用户表'
db2gorm可以在指定的目录下生成 user/user.go,内容如下:
package user
type User struct{
ID uint32
Name string
Age int `gorm:"default:-1"`
IsAdmin bool `gorm:"default:0"`
IsValid bool `gorm:"default:1"`
LoginTime time.Time `gorm:"default:CURRENT_TIMESTAMP"`
}
package main
import (
"git.sogou-inc.com/bpd-dhlib/db2gorm/gen"
)
dsn := "root:user237@tcp(10.10.10.10:3306)/mydb?charset=utf8&parseTime=true&loc=Local"
//生成指定单表
tblName := "User"
gen.GenerateOne(gen.GenConf{
Dsn: dsn,
WritePath: "./model",
Stdout: false,
Overwrite: true,
}, tblName)
gen.GenConf的说明如下:
gen.GenerateAll(gen.GenConf{
Dsn: dsn,
WritePath: "./model",
Stdout: false,
Overwrite: true,
})
建议使用gorm v1.2以上版本(v1.1*的版本和v1.2差别比较大)
建议gorm.Open时指定SingularTable为true,即使用单数表名。这样就不必在struct上定义TableName方法指定表名了。
gorm.Open(mysql.New(mysql.Config{
DSN:dsn,
}), &gorm.Config{
NamingStrategy:schema.NamingStrategy{
//单数表名
SingularTable: true,
},
})
表名对应的大驼峰命名做为struct名,全小写表名做为目录名,文件名和包名。 比如表名为demo_test, 则:
表名对应的大驼峰命名做为struct字段名。比如is_admin对应IsAdmin。但id字段除名,id固定对应ID。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有