gorm笔记

原创
2017/10/19 16:29
阅读数 494

感觉gorm文档还是太简单了,一些坑需要自己踩到再看源码才知道。

错误处理

不管什么操作,不要使用原始的DB对象获取错误,因为操作内部实际上是生成了一个新的DB对象并返回。

下面的用法是错误的:

var DB *gorm.DB
//.....
DB.Create(&user)
if DB.Error != nil {
    panic(DB.Error)
}

正确的方法:

var DB *gorm.DB
//.....

if newdb := DB.Create(&user);newdb.Error != nil {
    panic(newdb.Error)
}

除了Create,其他方法也一样的处理方式,可以简化一些:

if err := DB.Create(&user).Error;err != nil {
    panic(err)
}

对于查询操作,找不到结果也是一种错误,所以需要判断一下

if d := DB.First(&user);d.Error != nil {
    if false == d.RecordNotFound() {
        panic(d.Error)
    }
}

链式调用

基本上每个链式方法如:Where,Find,Limit等,都会返回一个新的DB对象,所以拆开调用的时候一定要注意替换原对象指针,举个例子:

user := User{}
model := db.Model(&user)
if typeName := c.DefaultQuery("type_name","");typeName != "" {
    model.Where("type_name = ?",typeName)
}
model.Find(&user)

这样写,where条件是没有用的,因为where方法会克隆出一个新的对象,正确的写法:

user := User{}
model := db.Model(&user)
if typeName := c.DefaultQuery("type_name","");typeName != "" {
    model = model.Where("type_name = ?",typeName)
}
model.Find(&user)
展开阅读全文
Go
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部