共计 2193 个字符,预计需要花费 6 分钟才能阅读完成。
参考资料
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 = ?