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 中的数据