读书笔记GO

《go web 编程》第四章 访问数据库:使用 Beego or

2022-09-27  本文已影响0人  bycall

SetMaxIdleConns

根据数据库的别名,设置数据库的最大空闲连接

orm.SetMaxIdleConns("default", 30)

SetMaxOpenConns

根据数据库的别名,设置数据库的最大数据库连接 (go>= 1.2)

orm.SetMaxOpenConns("default", 30)

目前 beego orm 支持打印调试,你可以通过如下的代码实现调试

 orm.Debug = true

接下来我们的例子采用前面的数据库表 User,现在我们建立相应的 struct

type Userinfo struct {
    Uid         int `orm:"PK"` //如果表的主键不是id,那么需要加上pk注释,显式的说这个字段是主键
    Username    string
    Departname  string
    Created     time.Time
}

type User struct {
    Uid         int `orm:"PK"` //如果表的主键不是id,那么需要加上pk注释,显式的说这个字段是主键
    Name        string
    Profile     *Profile   `orm:"rel(one)"` // OneToOne relation
    Post        []*Post `orm:"reverse(many)"` // 设置一对多的反向关系
}

type Profile struct {
    Id          int
    Age         int16
    User        *User   `orm:"reverse(one)"` // 设置一对一反向关系(可选)
}

type Post struct {
    Id    int
    Title string
    User  *User  `orm:"rel(fk)"`    // 设置一对多关系
    Tags  []*Tag `orm:"rel(m2m)"`
}

type Tag struct {
    Id    int
    Name  string
    Posts []*Post `orm:"reverse(many)"`
}

func init() {
    // 需要在 init 中注册定义的 model
    orm.RegisterModel(new(Userinfo),new(User), new(Profile), new(Tag))
}

注意一点,beego orm 针对驼峰命名会自动帮你转化成下划线字段,例如你定义了 Struct 名字为 UserInfo,那么转化成底层实现的时候是 user_info,字段命名也遵循该规则。

插入数据

下面的代码演示了如何插入一条记录,可以看到我们操作的是 struct 对象,而不是原生的 sql 语句,最后通过调用 Insert 接口将数据保存到数据库。

o := orm.NewOrm()
var user User
user.Name = "zxxx"
user.Departname = "zxxx"

id, err := o.Insert(&user)
if err == nil {
    fmt.Println(id)
}

我们看到插入之后 user.Uid 就是插入成功之后的自增 ID。

同时插入多个对象: InsertMulti

类似 sql 语句

insert into table (name, age) values("slene", 28),("astaxie", 30),("unknown", 20)

第一个参数 bulk 为并列插入的数量,第二个为对象的 slice

返回值为成功插入的数量

users := []User{
    {Name: "slene"},
    {Name: "astaxie"},
    {Name: "unknown"},
    ...
}
successNums, err := o.InsertMulti(100, users)

bulk 为 1 时,将会顺序插入 slice 中的数据

上一篇下一篇

猜你喜欢

热点阅读