文档章节

gorm笔记

吾爱
 吾爱
发布于 2017/10/19 16:29
字数 294
阅读 49
收藏 0
Go

感觉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)

© 著作权归作者所有

共有 人打赏支持
吾爱
粉丝 142
博文 265
码字总数 89754
作品 0
后端工程师
Grails 1.2参考文档速读系列

一个很好的Grails中文参考资料。 Grails 1.2参考文档速读(1):第1、2章 Grails 1.2参考文档速读(2):配置基础和环境 Grails 1.2参考文档速读(3):日志配置 Grails 1.2参考文档速读(4...

groovyland
2010/02/25
0
1
Grails 2.0.0.M1 发布

Grails 今天发布了 2.0.1 版本,包含了很多的新特性和改进。 Download | Release Notes | What's New 主要内容有: Groovy 1.8 support Servlet 3.0 Asynchronous features now supported A......

红薯
2011/08/02
569
0
Grails 2.4 发布,Groovy 开发框架

Grails 2.4 发布,该版本包含 Groovy 2.3 和 Spring 4.0.5. 此外值得关注的改进有: Standalone GORM & GSP Static Compilation Asset Pipeline Plugin GORM Subqueries New Maven Plugin 完......

oschina
2014/05/22
2.4K
8
GORM for MongoDB 3.0​ 发布

GORM for MongoDB 3.0 发布,此版本支持 MongoDB 2.6 的特性,包括新 GeoJSON 类型和全文搜索。更多更新内容请看 release notes 和 JIRA changelog 。 GORM 全程是 Grails' object relationa...

oschina
2014/04/26
1K
2
(开源)基于vue, react, node.js, go开发的微商城(含微信小程序)

微商城 地址: https://github.com/shen100/wemall 求star,求关注 项目截图 微信小程序 项目环境搭建 1 克隆代码 2 配置nginx 将文件拷贝到nginx的虚拟主机目录下 3 配置hosts 127.0.0.1 dev...

liushen829475
2017/06/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
44分钟前
3
0
现场看路演了!

HiBlock
昨天
6
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
6
0
官方精简版Windows10:微软自己都看不过去了

微软宣布,该公司正在寻求解决方案,以减轻企业客户的Windows 10规模。该公司声称,企业客户下载整个Windows 10文件以更新设备既费钱又费时。 微软宣布,该公司正在寻求解决方案,以减轻企业...

linux-tao
昨天
6
0
TypeScript基础入门之JSX(二)

转发 TypeScript基础入门之JSX(二) 属性类型检查 键入检查属性的第一步是确定元素属性类型。 内在元素和基于价值的元素之间略有不同。 对于内部元素,它是JSX.IntrinsicElements上的属性类型...

durban
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部