文档章节

gorm笔记

吾爱
 吾爱
发布于 2017/10/19 16:29
字数 294
阅读 34
收藏 0
点赞 0
评论 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)

© 著作权归作者所有

共有 人打赏支持
吾爱
粉丝 143
博文 264
码字总数 89585
作品 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
Revel v0.17.1 发布,Go 的全堆栈 Web 框架

Revel v0.17 和 v0.17.1 已发布,本次更新没有重大更改,详细如下: v0.17.1 Critical issue identified details here #1200 v0.17 [revel/revel] add-validation i18-lang-by-param Added ......

局长
2017/07/16
874
2
Grails 2.0 正式版发布

Grails 2.0 正式版发布了,Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate和其它标准Java框架之上,从而为大家带来一套能实现超高生产力的一...

红薯
2011/12/16
2.1K
6
Grails 1.1 Beta 2 版本发布

Grails是一个构建在Java 和Groovy 之上的动态Web应用框架 ,利用Java EE 领域的最好的breed APIs 包括Spring, Hibernate 和 SiteMesh 。允许Java 开发者利用他们使用多年的已有知识和被证实配...

红薯
2008/12/27
348
0
Grails 1.1 Beta 1发布

更好的 GORM 事件GORM 已经支持 beforeInsert, beforeUpdate 和 beforeDelete events, 现在添加了对 afterInsert, afterUpdate 和 afterDelete events的支持 支持基础类型集合的存储 GORM 现...

红薯
2008/11/30
409
0
Grails 1.1 RC1 版本发布

Grails 项目人员在 Groovy 1.6 的基础上发布了 1.1 RC1 版本,该版本在 GORM 部分有着非常大的改变和增强,其他包括插件、数据绑定、脚手架、控制器以及项目架构方面都有相应的增强,详细内容...

红薯
2009/02/20
91
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

istio 路由实例解析

根据链路追踪图如上: 资料:https://istio.io/docs/guides/bookinfo/ 流程解析: 1. 访问地址: http://IP:31380/productpage kubectl get svc --all-namespaces -o wide istio-system isti......

xiaomin0322
5分钟前
1
0
Centos7通过yum安装jdk8

先查看系统是否已有自带的jdk rpm -qa |grep java rpm -qa |grep jdk rpm -qa |grep gcj 如果没有输出信息,则说明系统没有安装。如果有输出信息,则执行下面的命令卸载 rpm -qa | grep jav...

iplusx
8分钟前
0
0
字体的动画

树不要皮必死无疑,人不要脸天下无敌。如果你此时正在被承受着不公平的待遇,不要伤心不要气馁,吃亏要趁早。 .menu ul li a { position:relative; color: #FFFFFF; text-decoration:...

Js_Mei
8分钟前
0
0
新手学习hadoop发行版本选择介绍

Hadoop对于从事互联网工作的朋友来说已经非常熟悉了,相信在我们身边有很多人正在转行从事hadoop开发的工作,理所当然也会有很多hadoop入门新手。Hadoop开发太过底层,技术难度远比我们想象的...

左手的倒影
9分钟前
0
0
iOS定时器循环引用问题解决

我们通常使用NSTimer或CADisplayLink会使用以下方式 //定义@property (nonatomic, strong)NSTimer *timer;//实现self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:p......

xiaobai1315
9分钟前
0
0
给wordpress程序提速

在上一节中,我们介绍了wordpress CMS主题提速,本节我们接着介绍wordpress主题提速:gravatar用户头像缓存和google字体去除。 gravatar头像受到全世界网络用户的喜爱,设置好gravatar头像后...

hero2019
11分钟前
0
0
DevExpress v18.1最新版帮助文档下载大全

DevExpress v18.1.4帮助文档下载列表大全来啦!包含.NET、VCL、HTML/JS系列所有帮助文档,提供CHM和PDF两个版本。除已停止更新的Silverlight、Windows 8外,其余均为最新版本。 文章底部扫描...

Miss_Hello_World
15分钟前
0
0
Unity Shader中各种空间及变换方法

前几天尝试写一个传送门的shader,发现自己对坐标之间的变换掌握的不够熟练,趁着这阵子想整理shader相关的知识点,先把各种空间及之间转换整理一下。 1 模型空间-世界空间-观察空间-裁剪空间...

爽歪歪ES
21分钟前
0
0

定义和应用 栈(stack)是一种特殊的线性表,其插入(也称入栈或压栈)和删除(也称出栈或弹栈)操作都在表的同一端进行。这一端被称为栈顶(top)另一端称为栈底端(bottom)。 我们生活中其实...

Frost729
22分钟前
0
0
数据分析挖掘学习干货:大数据处理技术的总结与分析

一 数据分析处理需求分类 1 事务型处理 在我们实际生活中,事务型数据处理需求非常常见,例如:淘宝网站交易系统、12306网站火车票交易系统、超市POS系统等都属于事务型数据处理系统。 这类系...

加米谷大数据
27分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部