model:普通crud/高级查询qs/原生sql查询

目录

一:普通CRUD

二:高级查询(条件查询获取对象)

1.高级查询之单表查询

2.高级查询之关系查询

三:原生sql查询


一:普通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 表达式

“字段名”  "表名"  “表名_ _字段名_ _操作符号”  “字段名_ _操作符号”

操作符号包括:

     后面以 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.多对多关系操作

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值