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(包含多种命令)


使用命令行创建表

模式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标签

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • beego orm是一个基于Go进行ORM操作的库,它采用了Go style方式对数据库进行操作,实现了struc...
    副班长国伟阅读 2,165评论 2 5
  • ORM官方文档为:https://github.com/beego/beedoc/blob/master/zh-C...
    b77bb494e846阅读 1,842评论 0 1
  • 1.类型相关内容 在实现类型相关业务之前,我们先创建类型表。这里我们添加上一对多多对多的关系。 一个类型下面有很多...
    强某某阅读 802评论 0 0
  • 一,beego简介 1,beego是一个go语言框架,可以用来快速开发API、Web、后端服务等各种应用。2,be...
    henryspace阅读 2,782评论 1 2
  • 3.2 ORM框架 Beego中内嵌了ORM框架,用来操作数据库。那么ORM框架是什么呢?ORM框架是Object...
    帶頭二哥阅读 954评论 0 1

友情链接更多精彩内容