参考资料
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 Userengine.Id(1).Get(&user)// SELECT * FROM user WHERE id = ?engine.Id(1).Update(&user)// UPDATE user SET ..., updaetd_at = ? WHERE id = ?