Go-xorm自动生成数据表对应struct
使用 golang 操作数据库的同学都会遇到一个问题 —— 根据数据表结构创建对应的 struct 模型。
因为 golang 的使用首字母控制可见范围,我们经常要设计 struct 字段名和数据库字段名的对应关系。
这是一个非常繁琐的过程。今天,记录一种自动生成代码的方法 —— xorm 工具。
关于 xorm
xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。
官网http://www.xorm.io/
电子书XORM操作指南
常用命令
xorm 是一组数据库操作命令的工具,包含如下命令:
1 | reverse 反转一个数据库结构,生成代码 |
编译xorm工具
下载数据库驱动
1 | go get github.com/go-sql-driver/mysql //MyMysql |
下载Xorm工具
1 | go get github.com/go-xorm/cmd/xorm |
编译工具
到GOPATH\src\github.com\go-xorm\cmd\xorm 目录下,执行
1 | go build |
当前目录产生xorm
文件,window下产生xorm.exe
文件
可能错误提示
1 | package cloud.google.com/go/civil: unrecognized import path "cloud.google.com/go/civil" |
src下,首先创建目录:cloud.google.com/go/civil
cd到这里去执行git clone https://github.com/googleapis/google-cloud-go
把civil下的.go文件cp 到cloud.google.com/go/civil下面
1 | mkdir -p cloud.google.com/go/civil |
使用xorm
xorm命令
查询帮助信息
1 | ./xorm help reverse |
得到帮助信息
1 | usage: xorm reverse [-s] driverName datasourceName tmplPath [generatedPath] [tableFilterReg] |
参数 -s 表示为每张表创建一个单独文件
接下来的参数依次是:驱动,数据源,模板目录(在源码的 /cmd/xorm/templates/goxorm 可根据需求定制),生成目录,表格过滤条件。
生成struct
1 | ./xorm reverse mysql root:password@$"@"tcp(host:3306)"/yzm_test?charset=utf8 templates/goxorm |
目录参数省略,会在当前目录建立一个 models
目录, 该目录有生成的go文件
内容如下
1 | package model |
可能错误
1 | reverse.go:196 default addr for network '(127.0.0.1:3306)' unknown |
原因是数据库连接没有指定tcp协议checked on the go-mysql-driver source code, on file dsn.go:86, the error only occurred when the network type is ""
1 | <username>:<password>@<network-type>(<host>:<port>)/<dbname> |
相应文档https://stackoverflow.com/questions/52808454/beego-orm-mysql-default-addr-for-network-unknown