目录
一:普通CRUD
orm接口使用
type Ormer interface {
Read(interface{}, …string) error
ReadOrCreate(interface{}, string, …string) (bool, int64, error)
Insert(interface{}) (int64, error)
InsertMulti(int, interface{}) (int64, error)
Update(interface{}, …string) (int64, error)
Delete(interface{}) (int64, error)
LoadRelated(interface{}, string, …interface{}) (int64, error)
QueryM2M(interface{}, string) QueryM2Mer//返回一个QueryM2Mer
QueryTable(interface{}) QuerySeter//返回一个querySetter
Using(string) error
Begin() error
Commit() error
Rollback() error
Raw(string, …interface{}) RawSeter//返回一个 RawSeter 使用 sql 语句直接进行操作
Driver() Driver
}
二:高级查询(条件查询获取对象)
ORM 以 QuerySeter 来组织查询,每个返回 QuerySeter 的方法都会获得一个新的 QuerySeter 对象。
https://beego.me/docs/mvc/model/query.md
基本使用方法:
o := orm.NewOrm()
// 获取 QuerySeter 对象,user 为表名
qs := o.QueryTable("user")
QuerySeter 是高级查询使用的接口,我们来熟悉下他的接口方法
type QuerySeter interface {
Filter(string, …interface{}) QuerySeter//
Exclude(string, …interface{}) QuerySeter//
SetCond(*Condition) QuerySeter//
Limit(int, …int64) QuerySeter//
Offset(int64) QuerySeter//
GroupBy(…string) QuerySeter//
OrderBy(…string) QuerySeter//
Distinct() QuerySeter//
RelatedSel(…interface{}) QuerySeter//
Count() (int64, error)
Exist() bool
Update(Params) (int64, error)
Delete() (int64, error)
PrepareInsert() (Inserter, error)
All(interface{}, …string) (int64, error)
One(interface{}, …string) error
Values(*[]Params, …string) (int64, error)
ValuesList(*[]ParamsList, …string) (int64, error)
ValuesFlat(*ParamsList, string) (int64, error)
}
每个返回 QuerySeter 的 api 调用时都会新建一个 QuerySeter,不影响之前创建的。
高级查询使用 Filter 和 Exclude 来做常用的条件查询。囊括两种清晰的过滤规则:包含, 排除
Filter
1.expr 表达式
“字段名” "表名" “表名_ _字段名_ _操作符号” “字段名_ _操作符号”
操作符号包括:
- exact / iexact 等于
- contains / icontains 包含
- gt / gte 大于 / 大于等于
- lt / lte 小于 / 小于等于
- startswith / istartswith 以…起始
- endswith / iendswith 以…结束
- in
- isnull
后面以 i
开头的表示:大小写不敏感
2.Filter
用来过滤查询结果,起到 包含条件 的作用
o.QueryTable("User").Filter("Articles__Article__Id",id).Distinct().All(&users)//字段名_ _表名_ _字段名
3.Exclude
4.SetCond
5.Limit/Offset/GroupBy/OrderBy/Distinct/Count
未完待续。。。
2.高级查询之关系查询
RelatedSel 关系查询,参数使用 expr
3.多对多关系操作
- type QueryM2Mer interface {
- }
eg:
//多对多的插入操作
//获取ORM对象
//获取被插入数据的对象 文章
//获取多对多操作对象
m2m := o.QueryM2M(&article,"Users")
//用多对多操作对象插入
m2m.Add(user)
三:原生sql查询
type RawSeter interface {
Exec() (sql.Result, error)
QueryRow(…interface{}) error
QueryRows(…interface{}) (int64, error)
SetArgs(…interface{}) RawSeter//
Values(*[]Params, …string) (int64, error)
ValuesList(*[]ParamsList, …string) (int64, error)
ValuesFlat(*ParamsList, string) (int64, error)
RowsToMap(*Params, string, string) (int64, error)
RowsToStruct(interface{}, string, string) (int64, error)
Prepare() (RawPreparer, error)
}
Exec
查询语句:
1.QueryTable
传入表名,或者 Model 对象,返回一个 QuerySeter
o := orm.NewOrm()
var qs orm.QuerySeter
qs = o.QueryTable("user")
2,。原生sql查询
使用 sql 语句直接进行操作
Raw 函数,返回一个 RawSeter 用以对设置的 sql 语句和参数进行操作
o := orm.NewOrm()
var r orm.RawSeter
r = o.Raw("UPDATE user SET name = ? WHERE name = ?", "testing", "slene")
Driver