db.Create(user)
db.Save(user)

参数只能用**结构体指针****,因为要根据指针写入该条插入的数据,

所以user可以作为该条数据使用。

新增只能用结构体

save方法在没有主键的时候是新增,有主键的时候是更新,save可以解决空字段问题。

可以使用 db.NewRecord()判断,该方法只检查 结构体对应数据表 的主键是否为空,不查表。

db.Delete(&User{})

db.Modle(&User{}).Update()
db.Modle(&User{}).Updates()

1.Modle可以传入&user, 得到的是 已修改 字段的struct,其他字段是默认字段,

2.map类型只能更新到外层(里层指针类型的字段会被置为空),嵌套的struct要解析到struct上去更新。

update更新单列,Update("name","wl")或者当Updates用。
updates可以传入map/struct。
struct只更新非零值的字段。
map的key可以是struct的key,也可以是数据表列名。
map的value要对应struct的类型,比如map[string]interface{}{"updated_at": time.Now()},不能使用字符串。

db.First(&user)
db.Last(&user)
db.Take(&user)
db.Find(&users) users := make([]User, 0)
db.Scan()
结果放入另一个struct
db.Pluck("name", &names) names := make([]stirng, 0)
单个字段的slice 查询条件可以在Where中增加,也可以内联,First(&user, "id=?", 1)

其他

gorm的增删改查是 链式方法,每次返回*gorm.DB,即可任意拼接。

db.Table("users") 或者 db.Modle(&User{}) 指定表名
db.Where("name=?", name)

示例

查询结果为一个数字时要用struct来接收
type Amount struct { Total float64 }
amount := Amount{}
db.Select("SUM(price) AS total").Scan(&amount) 更新设置NULL
struct是指针类型,Update("deleted_at", nil)
否则 Update("name", gorm.Expr("NULL))
Updates(map[string]interface{}{"name": gorm.Expr("NULL")}) 类型
gorm: bool, time必须是对应的类型,mysql则可以是0, 1 和字符串。
gorm 类型对不上则会使用对应struct的零值。 时区
创建记录时:
必须要是time类型,会根据时区来确定插入的数据时间。

go时间 go时区 数据库存储时间 数据库显示时间

2019-12-01 08:00:00 +8:00 2019-12-01 00:00:00 UTC 2019-12-01 08:00:00

2019-12-01 08:00:00 +0:00 2019-12-01 08:00:00 UTC 2019-12-01 16:00:00

查询时:

1.可以用Where("updated_at < ?", "2019-12-01");

2.时区不影响查询,只将时间部分作为本地时间进行查询。

gorm使用小结的更多相关文章

  1. Gorm 预加载及输出处理(一)- 预加载应用

    单条关联查询 先创建两个关联模型: // 用户模型 type User struct { gorm.Model Username string `gorm:"type:varchar(20) ...

  2. Gorm 预加载及输出处理(二)- 查询输出处理

    上一篇<Gorm 预加载及输出处理(一)- 预加载应用>中留下的三个问题: 如何自定义输出结构,只输出指定字段? 如何自定义字段名,并去掉空值字段? 如何自定义时间格式? 这一篇先解决前两 ...

  3. Gorm 预加载及输出处理(三)- 自定义时间格式

    前言 Gorm 中 time.Time 类型的字段在 JSON 序列化后呈现的格式为 "2020-03-11T18:26:13+08:00",在 Go 标准库文档 - time 的 ...

  4. [系列] Go - 基于 GORM 获取当前请求所执行的 SQL 信息

    前言 为了便于精准排查问题,需要将当前的请求信息与当前执行的 SQL 信息设置对应关系记录下来,记录的 SQL 信息包括: 执行 SQL 的当前时间: 执行 SQL 的文件地址和行号: 执行 SQL ...

  5. 从零开始编写自己的C#框架(26)——小结

    一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...

  6. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  7. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

  8. iOS--->微信支付小结

    iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...

  9. iOS 之UITextFiled/UITextView小结

    一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...

  10. K近邻法(KNN)原理小结

    K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...

随机推荐

  1. KingbaseES Json 系列十一:Json数组操作函数

    KingbaseES Json 系列十一--Json数组操作函数(JSONB_ARRAY_ELEMENTS,JSONB_ARRAY_ELEMENTS_TEXT,JSONB_ARRAY_LENGTH,J ...

  2. https安全性 带给im 消息加密的启发

    大家好,我是蓝胖子,在之前# MYSQL 是如何保证binlog 和redo log同时提交的?这篇文章里,我们可以从mysql的设计中学会如何让两个服务的调用逻辑达到最终一致性,这也是分布式事务实现 ...

  3. #二分图,并查集#洛谷 6185 [NOI Online #1 提高组] 序列

    题目 分析 考虑2操作可以在保证总和不变的情况下任意修改, 如果将2操作所在的连通块用并查集缩点,那么再考虑1操作, 按照1操作建边,如果存在奇环,那么只要这个环的点权和为偶数一定能使 \(a,b\) ...

  4. #阶梯NIM#Poj 1704 Georgia and Bob

    题目 有\(n\)个棋子摆放在x轴的正半轴上, 每次将棋子最多向左移动至上一个棋子之后(不能不移动), 不能操作为败,问先手是不是必胜 分析 这个模型可以转换成阶梯NIM的形式, 那么将奇数位置做NI ...

  5. 美团一面:说说synchronized的实现原理?问麻了。。。。

    引言 在现代软件开发领域,多线程并发编程已经成为提高系统性能.提升用户体验的重要手段.然而,多线程环境下的数据同步与资源共享问题也随之而来,处理不当可能导致数据不一致.死锁等各种并发问题.为此,Jav ...

  6. CondeseNetV2:清华与华为出品,保持特征的新鲜是特征复用的关键 | CVPR 2021

    论文提出SFR模块,直接重新激活一组浅层特征来提升其在后续层的复用效率,而且整个重激活模式可端到端学习.由于重激活的稀疏性,额外引入的计算量非常小.从实验结果来看,基于SFR模块提出的CondeseN ...

  7. c++ 暂停2秒,等待2秒

    std::chrono::milliseconds stopTime(2000); std::this_thread::sleep_for(stopTime);

  8. jemter返回结果中文乱码

    如图,返回的结果,中文出现乱码 对于这个问题有两种解决方法 第一种:修改jemeter文件,需要重启jemter 在 bin 目录下,找到  jmeter.properties  这个文件,修改编码格 ...

  9. docker 应用篇————tomcat例子[七]

    前言 虽然我干的事情和java不多,但是例子是为了熟悉原理,而不是为了例子而例子的,故而整理一下tomcat的例子. 正文 使用官方示例: 然后运行一下. 没有找到然后进行下载了. 可以看到这里就已经 ...

  10. mysql 重新整理——索引优化一个简单的案例 [十一]

    前言 经过了前面的一系列理论,那么用一个例子去看一下吧. 正文 EXPLAIN SELECT t3.emp_no,t3.first_name,(select t4.last_name from tem ...