xorm使用

安装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下。

想要看源码,可以访问

xorm/cmd: Command line tools for database operation written by Go. Use reverse instead. - cmd - Gitea: Git with a cup of teaicon-default.png?t=N7T8https://gitea.com/xorm/cmd

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 工具 - XORMicon-default.png?t=N7T8https://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 teaicon-default.png?t=N7T8https://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()里面的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值