gorm使用小结
增
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使用小结的更多相关文章
- Gorm 预加载及输出处理(一)- 预加载应用
单条关联查询 先创建两个关联模型: // 用户模型 type User struct { gorm.Model Username string `gorm:"type:varchar(20) ...
- Gorm 预加载及输出处理(二)- 查询输出处理
上一篇<Gorm 预加载及输出处理(一)- 预加载应用>中留下的三个问题: 如何自定义输出结构,只输出指定字段? 如何自定义字段名,并去掉空值字段? 如何自定义时间格式? 这一篇先解决前两 ...
- Gorm 预加载及输出处理(三)- 自定义时间格式
前言 Gorm 中 time.Time 类型的字段在 JSON 序列化后呈现的格式为 "2020-03-11T18:26:13+08:00",在 Go 标准库文档 - time 的 ...
- [系列] Go - 基于 GORM 获取当前请求所执行的 SQL 信息
前言 为了便于精准排查问题,需要将当前的请求信息与当前执行的 SQL 信息设置对应关系记录下来,记录的 SQL 信息包括: 执行 SQL 的当前时间: 执行 SQL 的文件地址和行号: 执行 SQL ...
- 从零开始编写自己的C#框架(26)——小结
一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...
- Python自然语言处理工具小结
Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- iOS--->微信支付小结
iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...
- iOS 之UITextFiled/UITextView小结
一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...
- K近邻法(KNN)原理小结
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...
随机推荐
- 使用 shell 脚本自动申请进京证 (六环外)
问题背景 外地车辆进入北京,需要办理<进京证>,不办理证件驶入后会被执法设备抓拍,一次罚 100 扣 1 分,目前唯一的线上办理通道是下载<北京交警>App,注册后添加车辆,就 ...
- Java开发岗面试题小结
8种基本数据类型 类型名称 关键字 占用内存 取值范围 字节型 byte 1 字节 -128~127 短整型 short 2 字节 -32768~32767 整型 int 4 字节 -21474836 ...
- MVC架构设计浅析(WEB网页开发)
MVC架构设计浅析 杨传伟 (石家庄铁道大学信息科学与技术学院,河北省,石家庄市,050043) 摘 要:本文以图书管理系统为案例(当前主流框架SpringMVC的原理来分析MVC的设计理念等),深入 ...
- LiftPool:双向池化操作,细节拉满,再也不怕丢特征了 | ICLR 2021
论文参考信号处理中提升方案提出双向池化操作LiftPool,不仅下采样时能保留尽可能多的细节,上采样时也能恢复更多的细节.从实验结果来看,LiftPool对图像分类能的准确率和鲁棒性都有不错的提升,而 ...
- C++设计模式 - 模板方法(Template Method)
组件协作模式: 现代软件专业分工之后的第一个结果是"框架与应用程序的划分","组件协作"模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用 ...
- MySQL创建和操纵表
表创建基础 CREATE TABLE customers ( cust_id int NOT NULL AUTO_INCREMENT , cust_name char(50) NOT NULL , c ...
- 强!10.6K star,一款开源HTTP测试工具,适合新手,简单、容易上手!
大家好,我是狂师! 今天给大家推荐一款开源的HTTP测试工具:Hurl,相比curl.wget功能更强大,且更容易上手.很适用新手使用. 1.项目介绍 Hurl是一个使用Rust语言开发的命令行工具, ...
- [Linux]将ArchLinux安装到U盘
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安装教程,同时由于当时硬盘空间不太够于是就打算安装到U盘上,也因此踩了不少坑. 但128G的U盘都拿来装Arch的话未免也太浪费了 ...
- #线段树,离散#nssl 1476 联
分析 由于下标过大,考虑离散,不仅仅是区间左右端点 假设只有一个区间从1到\(x\),那么修改后答案应该是\(x+1\) 所以说还要记录右端点+1的位置,你以为这就能A了吗 为了避免标记被覆盖,无论是 ...
- #矩阵树定理,高斯消元,容斥定理#洛谷 4336 [SHOI2016]黑暗前的幻想乡
题目 分析 这很明显是矩阵树定理,但是每个建筑公司都恰好修建一条边非常难做, 考虑如果一个建筑公司在某个方案中并没有恰好修建一条边, 那么这种方案一定能在不选其它任意一个公司的方案中被减掉, 那就可以 ...