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(包含多种命令)
模式2:RunSyncdb
orm.RunSyncdb(name,force,verbose) //name: 数据库别名;force: drop table 后再建表(true/false);verbose: 执行打印过程(true/false)
??(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标签