Go语言orm逆向工程 基于mysql生成struct并添加sql/gorm tag、json tag | 码农家园

GO 如何像mybatisGenerator一样通过数据库表生成对应的实体呢?

    • *
背景:学习gorm的过程中,struct的tag注解偏多,实体模型多的情况下,一个个写tag太慢。
    • *
思考:寻思着有没有类似mybatisGenerator呢样的逆向工程,生成相关的bean模型,并通过tag做好orm映射。
    • *
行动: github 进行搜索相关项目

[

](https://www.googleadservices.com/pagead/aclk?sa=L&ai=Ck_-WrSD2YsrzMIKT29gP_8yLuAzJlMO5a7vqlcmiDuuxvv75GhABIKuLqWBgnaHfgdgFoAH0_NPyA8gBCakCZ6rY7z7rgz6oAwHIA8sEqgT2AU_QWsfkERaEgtpfAF3LWZPGdKLLVwsirk9-gPPWW5PiBKmGKvymoed4Tz6U-T5Iw6ejHB3m5-okJ0Bj3UE3RnvPibIBIGhqYk3RcgAZit9IeE8lztNxjQWkNEL__rXozTtVPnZxvim8WdC35Is_Q56Dmkx5VLhyBSSyO4QxqFVNptLZ7x18-z8y1r3JTAJNGagMLKklST0M6HX2IqG82Xsf4w-2_q0q6H3F5heLyxyNretv8gF1qUFsDgP86CGQBcUTBkcyDnWr2cKz9RSQuRaNpFgQoI_ijuS9RrvrKb4op7MRfGJa3GxCYXe9GP2P1yUGJoUqyMAEy5mf5NUDoAYugAf0gqwNqAeOzhuoB5PYG6gH7paxAqgH_p6xAqgHpKOxAqgH1ckbqAemvhuoB5oGqAfz0RuoB5bYG6gHqpuxAqgH35-xAtgHANIIDwiAYRABGB8yAooCOgKAQLEJyNIKNHDU7o-ACgGYCwHICwGADAG4DAG4E-QD2BMNiBQE0BUB-BYBgBcB&ae=1&num=1&cid=CAASEuRoGrog0SyMYSnqozIQXjaScQ&sig=AOD64_16VCZEg6EbUYKzpIFHR_-kh8VLGg&client=ca-pub-1776224780566592&nb=9&adurl=https://www.west.cn/services/domain/%3Fgwm%3Dznadsym%26gclid%3DEAIaIQobChMIiv6P4YHB-QIVgskWBR1_5gLHEAEYASAAEgImYvD_BwE)

[域名注册
优选平台,
域名1元起](https://www.googleadservices.com/pagead/aclk?sa=L&ai=Ck_-WrSD2YsrzMIKT29gP_8yLuAzJlMO5a7vqlcmiDuuxvv75GhABIKuLqWBgnaHfgdgFoAH0_NPyA8gBCakCZ6rY7z7rgz6oAwHIA8sEqgT2AU_QWsfkERaEgtpfAF3LWZPGdKLLVwsirk9-gPPWW5PiBKmGKvymoed4Tz6U-T5Iw6ejHB3m5-okJ0Bj3UE3RnvPibIBIGhqYk3RcgAZit9IeE8lztNxjQWkNEL__rXozTtVPnZxvim8WdC35Is_Q56Dmkx5VLhyBSSyO4QxqFVNptLZ7x18-z8y1r3JTAJNGagMLKklST0M6HX2IqG82Xsf4w-2_q0q6H3F5heLyxyNretv8gF1qUFsDgP86CGQBcUTBkcyDnWr2cKz9RSQuRaNpFgQoI_ijuS9RrvrKb4op7MRfGJa3GxCYXe9GP2P1yUGJoUqyMAEy5mf5NUDoAYugAf0gqwNqAeOzhuoB5PYG6gH7paxAqgH_p6xAqgHpKOxAqgH1ckbqAemvhuoB5oGqAfz0RuoB5bYG6gHqpuxAqgH35-xAtgHANIIDwiAYRABGB8yAooCOgKAQLEJyNIKNHDU7o-ACgGYCwHICwGADAG4DAG4E-QD2BMNiBQE0BUB-BYBgBcB&ae=1&num=1&cid=CAASEuRoGrog0SyMYSnqozIQXjaScQ&sig=AOD64_16VCZEg6EbUYKzpIFHR_-kh8VLGg&client=ca-pub-1776224780566592&nb=0&adurl=https://www.west.cn/services/domain/%3Fgwm%3Dznadsym%26gclid%3DEAIaIQobChMIiv6P4YHB-QIVgskWBR1_5gLHEAEYASAAEgImYvD_BwE)

西部数码

[

立即选购

](https://www.googleadservices.com/pagead/aclk?sa=L&ai=Ck_-WrSD2YsrzMIKT29gP_8yLuAzJlMO5a7vqlcmiDuuxvv75GhABIKuLqWBgnaHfgdgFoAH0_NPyA8gBCakCZ6rY7z7rgz6oAwHIA8sEqgT2AU_QWsfkERaEgtpfAF3LWZPGdKLLVwsirk9-gPPWW5PiBKmGKvymoed4Tz6U-T5Iw6ejHB3m5-okJ0Bj3UE3RnvPibIBIGhqYk3RcgAZit9IeE8lztNxjQWkNEL__rXozTtVPnZxvim8WdC35Is_Q56Dmkx5VLhyBSSyO4QxqFVNptLZ7x18-z8y1r3JTAJNGagMLKklST0M6HX2IqG82Xsf4w-2_q0q6H3F5heLyxyNretv8gF1qUFsDgP86CGQBcUTBkcyDnWr2cKz9RSQuRaNpFgQoI_ijuS9RrvrKb4op7MRfGJa3GxCYXe9GP2P1yUGJoUqyMAEy5mf5NUDoAYugAf0gqwNqAeOzhuoB5PYG6gH7paxAqgH_p6xAqgHpKOxAqgH1ckbqAemvhuoB5oGqAfz0RuoB5bYG6gHqpuxAqgH35-xAtgHANIIDwiAYRABGB8yAooCOgKAQLEJyNIKNHDU7o-ACgGYCwHICwGADAG4DAG4E-QD2BMNiBQE0BUB-BYBgBcB&ae=1&num=1&cid=CAASEuRoGrog0SyMYSnqozIQXjaScQ&sig=AOD64_16VCZEg6EbUYKzpIFHR_-kh8VLGg&client=ca-pub-1776224780566592&nb=8&adurl=https://www.west.cn/services/domain/%3Fgwm%3Dznadsym%26gclid%3DEAIaIQobChMIiv6P4YHB-QIVgskWBR1_5gLHEAEYASAAEgImYvD_BwE)

1. 一款叫做 fuckDB 的开源项目可以通过Web页面,进行点点,进行配置。但是无论尝试直接go get ,还是基于docker都无法正确使用,前者是因为拉不下来指定的golang.org/x/sys ,后者安装正确但是交互无法应,定位不出需要修改的文件位置。

2. 在经过一段的时间的搜索后,发现了可以简单使用的生成工具 db2struct。经过readme '照本宣科’的指引后,达到了想要的结果,再此记录下操作步骤。

    • *
操作步骤
  1. go get github.com/Shelnutt2/db2struct/cmd/db2struct
  2. db2struct --host localhost -d test -t test_table --package myGoPackage --struct testTable -p --user testUser

其中参数定义可以通过-h查看

Usage of db2struct:
db2struct [-H] [-p] [-v] --package pkgName --struct structName --database databaseName --table tableName
Options:
-H, --host= Host to check mariadb status of
–mysql_port=3306 Specify a port to connect to
-t, --table= Table to build struct from
-d, --database=nil Database to for connection
-u, --user=user user to connect to database
-v, --verbose Enable verbose output
–package= name to set for package
–struct= name to set for struct
–json Add json annotations (default)
–no-json Disable json annotations
–gorm Add gorm annotations (tags)
–guregu Add guregu null types
–target= Save file path
-p, --password= Mysql password
-h, --help Show usage message
–version Show version

[

](https://www.googleadservices.com/pagead/aclk?sa=L&ai=CqcxBrSD2Yv_ZMdLF2gSj3Y74C8mUw7lr_Z3Nh6gO67G-_vkaEAEgq4upYGCdod-B2AWgAfT80_IDyAEJqQJnqtjvPuuDPqgDAcgDywSqBPYBT9DrslObz22BdDgiIek2_m1woZJVJpJUN95ukmhck-7a4h29E_m-U22-9f4trByljkD1Zm2wvMHD8KBjyxUnSULOrpuWn2j7ExuF0S0htiDDZNNecxS2OPfUIWL6qK585F0aXvfz1I0ORKCmz3G7Is2WmETsNu94yfg4SdJJ1rfJ2SFrS5nQ-_U0MYaICfj4vjrhEv5Jk6-2Xzg-Jsfo6MZKb3OWMEtNGRPH7u_dyegnP2Bgur57mmN98UC8eJLamTQPPAjQX4FKgC19f0KaLqAzfs5KAOlp_0A6bHmuJGLRXH-rNes-85Kmcrk9kdHyqEfuVB1twAS5-62dzwOgBi6AB_SCrA2oB47OG6gHk9gbqAfulrECqAf-nrECqAeko7ECqAfVyRuoB6a-G6gHmgaoB_PRG6gHltgbqAeqm7ECqAffn7EC2AcA0ggPCIBhEAEYHzICigI6AoBAsQlGfd7Mhr_i94AKAZgLAcgLAYAMAbgMAbgT5APYEw2IFArQFQH4FgGAFwE&ae=1&num=1&cid=CAASEuRoiWpt2tID7WfUhBucTZ7uAQ&sig=AOD64_2RRln_09jIH-QDnQXH61zi52jD4w&client=ca-pub-1776224780566592&nb=9&adurl=https://www.west.cn/cloudhost/%3Fgwm%3Dznads_yun2%26gclid%3DEAIaIQobChMIv-SQ4YHB-QIV0qKWCh2jrgO_EAEYASAAEgKnAfD_BwE)

[网站用云
服务器,2核2G 年
付只要48元/月](https://www.googleadservices.com/pagead/aclk?sa=L&ai=CqcxBrSD2Yv_ZMdLF2gSj3Y74C8mUw7lr_Z3Nh6gO67G-_vkaEAEgq4upYGCdod-B2AWgAfT80_IDyAEJqQJnqtjvPuuDPqgDAcgDywSqBPYBT9DrslObz22BdDgiIek2_m1woZJVJpJUN95ukmhck-7a4h29E_m-U22-9f4trByljkD1Zm2wvMHD8KBjyxUnSULOrpuWn2j7ExuF0S0htiDDZNNecxS2OPfUIWL6qK585F0aXvfz1I0ORKCmz3G7Is2WmETsNu94yfg4SdJJ1rfJ2SFrS5nQ-_U0MYaICfj4vjrhEv5Jk6-2Xzg-Jsfo6MZKb3OWMEtNGRPH7u_dyegnP2Bgur57mmN98UC8eJLamTQPPAjQX4FKgC19f0KaLqAzfs5KAOlp_0A6bHmuJGLRXH-rNes-85Kmcrk9kdHyqEfuVB1twAS5-62dzwOgBi6AB_SCrA2oB47OG6gHk9gbqAfulrECqAf-nrECqAeko7ECqAfVyRuoB6a-G6gHmgaoB_PRG6gHltgbqAeqm7ECqAffn7EC2AcA0ggPCIBhEAEYHzICigI6AoBAsQlGfd7Mhr_i94AKAZgLAcgLAYAMAbgMAbgT5APYEw2IFArQFQH4FgGAFwE&ae=1&num=1&cid=CAASEuRoiWpt2tID7WfUhBucTZ7uAQ&sig=AOD64_2RRln_09jIH-QDnQXH61zi52jD4w&client=ca-pub-1776224780566592&nb=0&adurl=https://www.west.cn/cloudhost/%3Fgwm%3Dznads_yun2%26gclid%3DEAIaIQobChMIv-SQ4YHB-QIV0qKWCh2jrgO_EAEYASAAEgKnAfD_BwE)

西部数码

[

立即选购

](https://www.googleadservices.com/pagead/aclk?sa=L&ai=CqcxBrSD2Yv_ZMdLF2gSj3Y74C8mUw7lr_Z3Nh6gO67G-_vkaEAEgq4upYGCdod-B2AWgAfT80_IDyAEJqQJnqtjvPuuDPqgDAcgDywSqBPYBT9DrslObz22BdDgiIek2_m1woZJVJpJUN95ukmhck-7a4h29E_m-U22-9f4trByljkD1Zm2wvMHD8KBjyxUnSULOrpuWn2j7ExuF0S0htiDDZNNecxS2OPfUIWL6qK585F0aXvfz1I0ORKCmz3G7Is2WmETsNu94yfg4SdJJ1rfJ2SFrS5nQ-_U0MYaICfj4vjrhEv5Jk6-2Xzg-Jsfo6MZKb3OWMEtNGRPH7u_dyegnP2Bgur57mmN98UC8eJLamTQPPAjQX4FKgC19f0KaLqAzfs5KAOlp_0A6bHmuJGLRXH-rNes-85Kmcrk9kdHyqEfuVB1twAS5-62dzwOgBi6AB_SCrA2oB47OG6gHk9gbqAfulrECqAf-nrECqAeko7ECqAfVyRuoB6a-G6gHmgaoB_PRG6gHltgbqAeqm7ECqAffn7EC2AcA0ggPCIBhEAEYHzICigI6AoBAsQlGfd7Mhr_i94AKAZgLAcgLAYAMAbgMAbgT5APYEw2IFArQFQH4FgGAFwE&ae=1&num=1&cid=CAASEuRoiWpt2tID7WfUhBucTZ7uAQ&sig=AOD64_2RRln_09jIH-QDnQXH61zi52jD4w&client=ca-pub-1776224780566592&nb=8&adurl=https://www.west.cn/cloudhost/%3Fgwm%3Dznads_yun2%26gclid%3DEAIaIQobChMIv-SQ4YHB-QIV0qKWCh2jrgO_EAEYASAAEgKnAfD_BwE)

产生出来的struct 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

type AgentOrgOperatorManage struct {
    CREATEDAT       time.Time      `gorm:"column:CREATED_AT" json:"CREATED_AT"`
    CREATEDBY       string         `gorm:"column:CREATED_BY" json:"CREATED_BY"`
    UPDATEDAT       time.Time      `gorm:"column:UPDATED_AT" json:"UPDATED_AT"`
    UPDATEDBY       string         `gorm:"column:UPDATED_BY" json:"UPDATED_BY"`
    CityCode        sql.NullString `gorm:"column:city_code" json:"city_code"`
    CityName        sql.NullString `gorm:"column:city_name" json:"city_name"`
    ID              int64          `gorm:"column:id;primary_key" json:"id"`
    OperatorLoginNo string         `gorm:"column:operator_login_no" json:"operator_login_no"`
    OperatorName    sql.NullString `gorm:"column:operator_name" json:"operator_name"`
    OperatorPhone   sql.NullString `gorm:"column:operator_phone" json:"operator_phone"`
    OperatorType    sql.NullString `gorm:"column:operator_type" json:"operator_type"`
    OrgID           sql.NullString `gorm:"column:org_id" json:"org_id"`
    OrgName         sql.NullString `gorm:"column:org_name" json:"org_name"`
    OrgType         sql.NullString `gorm:"column:org_type" json:"org_type"`
    ProvinceCode    sql.NullString `gorm:"column:province_code" json:"province_code"`
    ProvinceName    sql.NullString `gorm:"column:province_name" json:"province_name"`
    Status          sql.NullString `gorm:"column:status" json:"status"`
}

// TableName sets the insert table name for this struct type
func (a *AgentOrgOperatorManage) TableName() string {
    return "t_agent_org_operator_manage"
}
//db2struct --host 127.0.0.1  -d o2o --package moudle  -p 123456 --user root -t t_delivery_store_operator_record --struct DeliveryStoreOperatorRecord --gorm --json

其中碰到的问题:db2struct: command not found

发现issures有人提到了同样的问题,再回想之前通过zsh连接mysql的时候好像也出现过这个题,most likely the $GOPATH/bin is not in your $PATH variable. Try running $GOPATH/bin/db2struct --help.

bash_profile
修改了相应环境变量后解决。


原网址: 访问
创建于: 2022-08-12 17:43:43
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论