当前位置: 首页>后端>正文

beego-- [7]orm

beego orm使用流程:

0. 导入包

? ? orm? +? dbdriver
? ??"github.com/astaxie/beego/orm"? ? ? _ "github.com/go-sql-driver/mysql"

1. 注册驱动

? ? orm.RegisterDriver("mysql", orm.DRMySQL)? // 可省略

2. 注册数据库

? ?orm.RegisterDataBase("default", "mysql", dsn)

3. 定义数据模型

以UserModel为例:

type UserModel struct {
? ? ? ? ?ID ? ? ? ?int ? ? ? ?`orm:"column(id)"`
? ? ? ? ?Name ? ? ?string ? ? `orm:"size(64)" `
? ? ? ? ?Password ?string ? ? `orm:"size(1024)"`
? ? ? ? ?Gender ? ?string ? ? `orm:""`
? ? ? ? ?Height ? ?float32 ? ?`orm:""`
? ? ? ? ?Tel ? ? ? string ? ? `orm:""`
? ? ? ? ?Birthday ?*time.Time `orm:"type(date)"`
? ? ? ? ?CreatedAt *time.Time `orm:"auto_now_add"`
? ? ? ? ?UpdatedAt *time.Time `orm:"auto_now"`
? ? ? ? ?DeletedAt *time.Time `orm:"null"`
}

4. 注册数据模型

? ?orm.RegisterModel(new(UserModel))

5. 操作
? ? ? ? ? ?(1)同步表结构

模式1:RunCommand

? ? ? ? ? ? ? ? ? s1:orm.RunCommand()

? ? ? ? ? ? ? ? ? s2:命令行中使用 orm syncdb(包含多种命令)

beego-- [7]orm,第1张
使用命令行创建表

模式2:RunSyncdb

orm.RunSyncdb(name,force,verbose) //name: 数据库别名;force: drop table 后再建表(true/false);verbose: 执行打印过程(true/false)

beego-- [7]orm,第2张
使用程序创建表

??(2)数据:增,删,改,查

获取数据库连接:ormer := orm.NewOrm()

增加:ormer.insert(&User{.....})

删除:ormer.delete(&User{ID:...})?

更新:ormer.Update(&User{ID:...},field1,field2...)??

查询:ormer.Read(&User{....})? //查找时,请确保所用字段或者多个字段组合为唯一的存在

结果集

? ? 方式1:querySet? :=? ormer.QueryTable(dbname) //不推荐使用,因为dbname有可能会更改

? ?方式2:querySet? :=? ormer.QueryTable(&User{})

querySet.Count()? ?=> 查询数据量

querySet.All(&users)? ? ?(var users []*User)? ?=> 查询所有数据

querySet 中的where查询:querySet.Filter(列名__条件,对象)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?条件:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (1)关系:=([i]exact),? <(lt),? >(gt),? >=(gte),? ?<=(lte)? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? in(in)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? like? %content%([i]contains)? start%([i]startwith)? %end([i]endwith)

queryset.Exclude(列名__条件,对象)? // 排除特定条件下的查询结果

queryset.Limit(m).Offset(n).All(&users)? //分页查询:每页m个

queryset.OrderBy(field_name).All(&users) // 按字段field_name升序排列

queryset.OrderBy(-field_name).All(&users) // 按字段field_name降序排列

queryset.OrderBy(field_name1,field_name2....).All(&users) // 按多个字段排列

queryset.OrderBy(field_name1,field_name2....).One(&users) // 只查一条数据出来

复杂的查询条件:

orm.NewCondition()

【请验证】

使用querySeter(querySeter=new(QuerySet))进行查询条件时需要注意:

当使用QueryTable获取querySeter时,再在querySeter进行Filter查询/SetCond查询,必须是进行整体的组合查询,而不能单独进行查询,以下用代码解释:

querySeter = orm.QueryTable(new(User))

querySeter = querySeter.Filter("name__exact", "Peter")

querySeter = querySeter.Filter("Job__exact", "Manger")

以上代码最终的结果 ≠?querySeter = querySeter.Filter("name__exact", "Peter").Filter("Job__exact", "Manger") ( 多个 Filter 之间使用 AND 连接 )

因为最开始Filter查询后,再次Filter,无法将上一次的查询条件合并到第二次的查询条件中

参考文章:

【0】?beedoc -- model 官方最权威

【1】使用beedb函式库进行ORM开发

【2】beego框架图文简介讲解 -- ORM框架

【3】beego中orm tag的使用

【4】beego/beedoc -- 关于orm使用的说明

【5】beego/beedoc -- QuerySeter的使用

【6】Beego ORM中QueryTable源码 -- 475行? ? ? ? ? ?QuerySeter 接口源码 -- 272行(请详看,附带示例代码)

【7】beego ORM 高级查询 + 原生SQL查询

【8】ORM标签


https://www.xamrdz.com/backend/3t91940572.html

相关文章: