Gorm存在时更新,不存在时创建的问题
更新时间:2024年08月08日 14:47:32 作者:大杯无糖
这篇文章主要介绍了Gorm存在时更新,不存在时创建的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
背景
最近开发过程中遇到了一个需求,需要把钉钉组织加架构里面的部门信息导入到数据库中。
部门是会变动的,所以如果部门变动了,就需要更新一下这张表。
但是无论部门怎么变动,一个已经存在的部门的id是不会变的。
所以,当钉钉的组织架构变动的时候,我们需要把老的部门更新,新的部门创建。
我最初想的是,使用if else语句,if dept_id已经存在,那就更新,反之则创建,但是我感觉这样有些不太专业,gorm应该会直接有现成的功能,果然,在我一番搜索之后,终于找到了。
具体实现
使用一个gorm操作,智能化的完成上面操作。 我们就可以用到Upsert 了。
创建 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.

上面的一句英文 Update columns to new value on `id` conflict 意思是:
如果id已经存在了,那我就更新,反之id不存在,那我就插入。
第一次执行,全部插入

然后我把那个1手动改成2

然后再去使用钉钉接口获取一次,这个使用如果只有这个2变成了1,那就代表成功了

最后附上部门表结构

具体代码

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Go每日一库之quicktemplate的使用
quicktemplate快速、功能强大、易于使用的Go模板引擎。比html/模板快20倍,本文我们就详细的介绍一下quicktemplate的具体使用,感兴趣的可以了解一下
2021-07-07
Go语言判断文件或文件夹是否存在的方法
这篇文章主要介绍了Go语言判断文件或文件夹是否存在的方法,结合具体实例形式对比分析了Go语言针对文件与目录判断的操作技巧与相关注意事项,需要的朋友可以参考下
2017-05-05
Go Asynq异步任务处理的实现
Asynq是一个新兴的异步任务处理解决方案,它提供了轻量级的、易于使用的API,本文主要介绍了Go Asynq异步任务处理的实现,具有一定的参考价值,感兴趣的可以了解一下
2023-06-06
从入门到精通:Go语言XML数据解析指南
Go语言的XML包提供了强大的数据解析功能,让你轻松处理各种XML格式的数据,这个指南将带你深入了解如何使用Go语言的XML包,快速上手XML数据解析,准备好开启XML解析之旅了吗?Let's Go!
2024-03-03
Golang中多个if代码优化小技巧
这篇文章主要为大家详细介绍了Golang中一些常用的if代码优化小技巧,w文中的示例代码简洁易懂,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
2023-10-10
多阶段构建优化Go 程序Docker镜像
这篇文章主要为大家介绍了多阶段构建优化Go 程序Docker镜像,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-08-08
golang中获取变量类型的方法总结
golang中是没有提供内置函数来获取变量的类型的,但是通过一定的方式也可以获取,下面主要给大家介绍了几个golang获取变量类型的几种方式,需要的朋友可以参考下
2025-03-03
golang动态库(so)生成与使用方法教程
这篇文章主要给大家介绍了关于golang动态库(so)生成与使用的相关资料,我们平时使用的动态库都是由c/c++开发最后生成的.so文件,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
2023-07-07
最新评论