【GO】xorm - Go语言中文社区

【GO】xorm


参考资料
http://books.studygolang.com/...
https://www.cnblogs.com/MyUni...
https://www.cnblogs.com/qfDav...
https://www.kancloud.cn/kancl...

1. 简介

xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。xorm的目标并不是让你完全不去学习SQL,我们认为SQL并不会为ORM所替代,但是ORM将可以解决绝大部分的简单SQL需求。xorm支持两种风格的混用。

特性

  • 支持 Struct 和数据库表之间的灵活映射,并支持自动同步
  • 事务支持
  • 同时支持原始SQL语句和ORM操作的混合执行
  • 使用连写来简化调用
  • 支持使用ID, In, Where, Limit, join, Having, Table, SQL, Cols等函数和结构体等方式作为条件
  • 支持级联加载 Struct
    - Schema支持(仅Postgres
  • 支持缓存
  • 通过 xorm.io/reverse 支持根据数据库自动生成 xorm 结构体
  • 支持记录版本(即乐观锁)
  • 通过 xorm.io/builder 内置 SQL Builder 支持
  • 上下文缓存支持
  • 支持日志上下文

驱动支持
xorm 当前支持的驱动和数据库如下:

  • Mysql5 / Mysql8.* / Mariadb / Tidb
    • github.com/go-sql-driver/mysql
    • github.com/ziutek/mymysql/godrv
  • Postgres / Cockroach
    • github.com/lib/pq
  • SQLite
    • github.com/mattn/go-sqlite3
  • MsSql
    • github.com/denisenkom/go-mssqldb
  • Oracle
    • github.com/mattn/go-oci8 (试验性支持)

安装

go get xorm.io/xorm

2.查询

2.1 Cols特定字段查询
Cols方法可以接受一个或者多个特点的表字段名称,用来表示限定于操作特定的表字段。依然通过案例来说明:

 engine.Cols("user_name","status").Find(&admins)
 //select user_name, status from admin

上述Cols操作表示的sql语句就是注释所对应的sql语句,表示从admin表中,查询特定的user_name, status两个字段,并将查询后的集合进行返回。

 engine.Cols("user_name","status").Update(&admin)
 //update admin set user_name = admin.User_name and status = admin.Status

我们可以看到,除了Find方法外,还可以调用Update方法,这里即表示更新表结构中的某条数据,且仅仅对该条数据的user_name和status两个字段进行更新,这正是由Cols方法的参数限定的。
AllCols操作所有字段 除了上述的Cols指定一个或者多个字段以外,还可以通过AllCols方法来操作表所有字段,用法与Cols使用方法一致,我们不再赘述。
MustCols操作限定字段MustCols意为操作必须对某些字段起作用,该方法的使用和Update方法相结合的情况较多。

2.2 Get方法
查询单条数据使用Get方法,在调用Get方法时需要传入一个对应结构体的指针,同时结构体中的非空field自动成为查询的条件和前面的方法条件组合在一起查询。

2.3 Find方法
查询多条数据使用Find方法,Find方法的第一个参数为slice的指针或Map指针,即为查询后返回的结果,第二个参数可选,为查询的条件struct的指针。

2.4 Count方法
统计数据使用Count方法,Count方法的参数为struct的指针并且成为查询条件。

user := new(User)
total, err := engine.Where("id >?", 1).Count(user)

2.5 Rows方法
Rows方法和Iterate方法类似,提供逐条执行查询到的记录的方法,不过Rows更加灵活好用。

user := new(User)
rows, err := engine.Where("id >?", 1).Rows(user)
if err != nil {
}
defer rows.Close()
for rows.Next() {
    err = rows.Scan(user)
    //...
}

2.6 更新时间Updated
Updated可以让您在记录插入或每次记录更新时自动更新数据库中的标记字段为当前时间,需要在xorm标记中使用updated标记,如下所示进行标记,对应的字段必须为time.Time类型。

type User struct {
    Id int64
    Name string
    UpdatedAt time.Time `xorm:"updated"`
}

在Insert(), InsertOne(), Update()方法被调用时,updated标记的字段将会被自动更新为当前时间,如下所示:

var user User
engine.Id(1).Get(&user)
// SELECT * FROM user WHERE id = ?
engine.Id(1).Update(&user)
// UPDATE user SET ..., updaetd_at = ? WHERE id = ?
版权声明:本文来源Segmentfault,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://segmentfault.com/a/1190000040054044
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-13 14:10:37
  • 阅读 ( 885 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢