安装xorm工具(废弃)
(现在已经不这么用了,得用reverse工具,下面步骤看看就得了,是以前那么用的)
1、安装xorm可执行文件
执行:
export GOPROXY=https://goproxy.cn
go install xorm.io/cmd/xorm@latest
说明:
- 从go 1.16起,官方说,不应该用go get下载安装命令(即可执行程序),不过依然可以用。从go 1.17起,如果使用go get 安装命令会告警,所以建议直接用go install 安装命令。
- xorm工具的可执行文件会被放在 GOPATH路径bin目录下,确保GOPATH/bin配置到PATH路径中,这样可以全局执行xorm命令。
- xorm工具的代码会被放到GOPATH/pkg/mod下。
想要看源码,可以访问
2、从代码中提出template
执行完上面的go install之后,xorm的相关代码会被下载到pkg/mod下,从里面找到cmd/xorm/template文件夹,拷贝出来。
比如拷贝到/home/song/templates。里面内容如下
c++ dict go gomeddler goxorm objc
3、reverse使用例子
- 会在当前目录生成models文件夹,里面是数据库表对应的go文件。
- 如果要指定输出到某个目录,最后一个参数指定了输出路径。
用于pg:
xorm reverse postgres "user=xxxx password=xxxx dbname=xxxx host=127.0.0.1 port=5432 sslmode=disable" /home/song/templates/goxorm/ /home/song/models
用于mysql:
xorm reverse mysql "username:password@(127.0.0.1:3306)/dbname?charset=utf8" /home/song/templates/goxorm /home/song/models
安装reverse工具(在用)
参考文档Reverse 工具 - XORMhttps://xorm.io/zh/docs/chapter-14/readme/
只要运行下面命令安装即可
go install xorm.io/reverse@latest
reverse可执行文件会被安装到 GOPATH/bin下
使用这个命令时需要提供配置文件地址做参数,具体可以参考xorm/reverse: A flexsible and powerful command line tool to convert database to codes - reverse - Gitea: Git with a cup of teahttps://gitea.com/xorm/reverse
我在ubuntu子系统使用下面的文件,custom.yml
kind: reverse
name: mydb
source:
database: postgres
conn_str: user=xxxx password=xxxx dbname=xxxx host=127.0.0.1 port=5432 sslmode=disable
targets:
- type: codes
language: golang
output_dir: ./models
然后执行
reverse -f custom.yml
使用注意事项
1、代码model层和实际表结构不一致报错
定义的models中有结构体属性在实际表中没有时,执行查询会报错。
比如定义的models中Users结构体里面有Name字段,但是数据库中表字段叫UserName,这样查询用session.Get(&m)就会报错。
所以删除数据库的字段要注意,xorm的一些查询使用可能会报错。
2、事务注意isAutoClose
如果用engine.Context(ctx),虽然得到了session,但是默认设置了session.isAutoClose=true。如果我们把这个session用于事务,等到执行session.Insert()会立马rollback,因为执行的时候就会关闭session。
所以一旦是用于事务的session,都必须用engine.NewSession得到。可以参考engine.Transaction()里面的实现。