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 sync.Waitgroup的使用

    深入理解go sync.Waitgroup的使用

    WaitGroup在go语言中,用于线程同步,本文主要介绍了深入理解go sync.Waitgroup的使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 详解go-zero如何使用validator进行参数校验

    详解go-zero如何使用validator进行参数校验

    这篇文章主要介绍了如何使用validator库做参数校验的一些十分实用的使用技巧,包括翻译校验错误提示信息、自定义提示信息的字段名称、自定义校验方法等,感兴趣的可以了解下
    2024-01-01
  • Golang桥接模式讲解和代码示例

    Golang桥接模式讲解和代码示例

    桥接是一种结构型设计模式,可将业务逻辑或一个大类拆分为不同的层次结构,从而能独立地进行开发,本文将通过代码示例详细给大家介绍一下Golang桥接模式,需要的朋友可以参考下
    2023-06-06
  • GoLang中的timer定时器实现原理分析

    GoLang中的timer定时器实现原理分析

    Timer中对外暴露的只有一个channel,这个 channel也是定时器的核心。当计时结束时,Timer会发送值到channel中,外部环境在这个 channel 收到值的时候,就代表计时器超时了,可与select搭配执行一些超时逻辑
    2023-02-02
  • golang time包的用法详解

    golang time包的用法详解

    这篇文章主要介绍了golang time包的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 如何用go操作iptables和ipset设置黑白名单

    如何用go操作iptables和ipset设置黑白名单

    这篇文章主要介绍了如何用go操作iptables和ipset设置黑白名单问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • golang 基于 mysql 简单实现分布式读写锁

    golang 基于 mysql 简单实现分布式读写锁

    这篇文章主要介绍了golang 基于mysql简单实现分布式读写锁,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Mac上Go环境和VS Code的正确安装与配置方法

    Mac上Go环境和VS Code的正确安装与配置方法

    Go语言是一个新兴的语言。下面介绍一下如何在Mac系统下安装和使用这个语言,Go语言提供了mac下安装包,可直接下载安装包点击安装
    2018-03-03
  • Go 语言前缀树实现敏感词检测

    Go 语言前缀树实现敏感词检测

    这篇文章主要为大家介绍了Go语言前缀树实现敏感词检测实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Go routine调度详解

    Go routine调度详解

    这篇文章主要介绍了Go routine调度详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01

最新评论