golang中gorm使用

前言

记录下go语言操作mysql数据库,选用gorm,gorm是一个流行的对象关系映射(ORM)库,用于简化与数据库的交互。


接入步骤

  1. 安装gorm:首先,你需要使用Go模块来安装gorm。在终端中运行以下命令:

    go get -u gorm.io/gorm
    
  2. 选择数据库驱动:gorm本身是一个抽象层,需要使用特定数据库的驱动程序。选择适合你数据库的驱动并安装它。例如,如果你使用MySQL,可以运行:

    go get -u gorm.io/driver/mysql
    

    如果使用其他数据库,选择对应的驱动。

  3. 导入gorm和数据库驱动:在go代码中导入gorm和所选的数据库驱动。

    package mainimport ("gorm.io/gorm""gorm.io/driver/mysql"
    )
    
  4. 连接数据库:使用gorm的Open函数连接到数据库。在你的代码中设置数据库连接字符串。

    dsn := "user:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {panic("Failed to connect to database")
    }
    
  5. 定义模型:创建与数据库表对应的模型结构体。

    type User struct {gorm.ModelUsername stringEmail    string
    }
    

    在这个例子中,User模型包含IDCreatedAtUpdatedAtDeletedAt等gorm提供的标准模型字段。

  6. 迁移数据库:使用gorm的AutoMigrate方法创建表格。这会确保数据库中有你定义的模型对应的表格。

    err = db.AutoMigrate(&User{})
    if err != nil {panic("Failed to migrate database")
    }
    
  7. 使用gorm进行CRUD操作:现在你可以使用gorm进行数据库操作,例如创建、查询、更新和删除记录。

    // 创建记录
    user := User{Username: "john_doe", Email: "john@example.com"}
    db.Create(&user)// 查询记录
    var foundUser User
    db.First(&foundUser, "username = ?", "john_doe")// 更新记录
    db.Model(&foundUser).Update("Email", "new_email@example.com")// 删除记录
    db.Delete(&foundUser)
    
  8. 项目中可以参考下面代码:在model包中使用全局的db变量即可进行mysql操作

    package modelimport ("fmt""log""time""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/schema"
    )// 创建全局数据库连接对象
    var db *gorm.DB// 模型/数据库连接对象 初始化
    func init() {var (err                          errordbName, user, password, host string)dbName = "" //数据库名称user = "" //用户名password = "" //密码host = "" //连接地址db, err = gorm.Open(mysql.Open(fmt.Sprintf("%s:%s@tcp(%s)/%s?	charset=utf8&parseTime=True&loc=Local",user,password,host,dbName)), &gorm.Config{NamingStrategy: schema.NamingStrategy{SingularTable: true,}})if err != nil {log.Println(err)}sqlDB, err := db.DB()if err != nil {log.Println(err)}sqlDB.SetMaxIdleConns(10)sqlDB.SetMaxOpenConns(100)sqlDB.SetConnMaxLifetime(time.Hour)
    }

这是一个基本的gorm集成和使用示例。根据你的实际需求,可能需要更复杂的查询、关联等操作,gorm提供了强大的功能来满足这些需求。可以查阅gorm文档以获取更详细的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】nmap命令:扫描网络中的主机和端口

目录 1.扫描特定IP地址的所有端口: 2.扫描特定IP地址的特定端口: 3.扫描一个IP地址范围的端口: 4.扫描特定端口范围: 5.扫描并显示所有端口的详细信息: 6.扫描并输出XML格式的结果: 7.使用“ping…

Doris 案例篇——长安汽车基于 Doris 的车联网数据分析平台建设实践

Doris 案例篇——长安汽车基于 Doris 的车联网数据分析平台建设实践 随着消费者更安全、更舒适、更便捷的驾驶体验需求不断增长,汽车智能化已成必然趋势。长安汽车智能化研究院作为长安汽车集团有限责任公司旗下的研发机构,专注于汽车智能化技术的创新与研究。为满足各业务部…

数据结构第十一弹---堆

堆 1、堆的概念及结构2、堆的性质3、堆的调整算法3.1、向下调整算法3.2、向上调整算法 4、堆的实现4.1、头文件包含和结构定义4.2、初始化4.3、销毁4.4、插入数据4.5、删除数据 删除堆顶4.6、获取堆顶元素4.7、获取有效数据个数4.8、判断是否为空 5、代码汇总5.1、Heap.h5.2、H…

好用的设备租赁管理软件有哪些?

“我们公司是做设备租赁的,想找一款适合设备租赁的库存管理软件,最好有库存管理,客户信息,设备外调管理,租赁天数管理,设备的借出与归还信息管理与查询。” 总结一下—— 库存管理客户信息管理设备租赁管…

阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期

前言 Certbot是一款免费且开源的自动化安全证书管理工具,由电子前沿基金会(EFF)开发和维护,是在Linux、Apache和Nginx服务器上配置和管理SSL/TLS证书的一种机制。Certbot可以自动完成域名的认证并安装证书。 一、 安装软件 1.1…

38.深入MySQL

深入MySQL 索引 索引是关系型数据库中用来提升查询性能最为重要的手段。关系型数据库中的索引就像一本书的目录,我们可以想象一下,如果要从一本书中找出某个知识点,但是这本书没有目录,这将是意见多么可怕的事情!我们…

JVM如何执行synchronized修饰的方法

首先市面上关于synchronized的资料已经很多了,但是大家对于底层的原理实现可能没有什么概念,大多都是死记硬背,所以我想通过实战的方式给大家带来一些不一样的体验。具体体现在哪些方面呢? 更系统。市面上目前虽然资料众多&#x…

【OpenCV学习笔记02】- 图像入门

内容 这里介绍了图像处理的入门操作,,你将学习如何读取图像,如何显示图像以及如何将其保存回去你将学习以下功能:cv.imread(),cv.imshow(),cv.imwrite() 简单使用OpenCV 读取图像 使用cv.imread()函数读…

【程序员干货】开发常用免费接口

全国快递物流地图轨迹查询:【H5物流轨迹、单号识别】通过物流单号和收寄件地址,自动评估物流时效,并在地图中展示包裹运输轨迹。包括顺丰、圆通、申通等主流快递公司。自动识别快递公司及单号,实时查询,稳定高效&#…

WPF 入门教程DispatcherTimer计时器

https://www.zhihu.com/tardis/bd/art/430630047?source_id1001 在 WinForms 中,有一个名为 Timer 的控件,它可以在给定的时间间隔内重复执行一个操作。WPF 也有这种可能性,但我们有DispatcherTimer控件,而不是不可见的控件。它几…

15-链表-环形链表 II

这是链表的第15题,力扣链接。 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链…

中科驭数诚邀您参加第二届证券基金行业先进计算技术大会暨2024低时延技术创新实践论坛(上海站)

低时延技术是证券基金期货领域业务系统的核心技术,是打造极速交易系统领先优势的关键,也是证券基金行业关注的前沿技术热点。 继去年圆满举办首届证券基金行业先进计算技术大会之后,在中国计算机学会集成电路设计专委、先进计算产业联盟、证…

在macos上查看当前进程的栈信息

概述 在调试程序时,如cpu莫名的高或低,一个常用的方式就是打印当前进行的调用栈,然后确认各线程的执行函数是否有异常。 在linux系统中可以使用pstack命令,直接打印各线程的栈信息,可惜在macos上没有该命令。一种解决…

25 心形按钮

效果演示 实现了一个心形的心形图案&#xff0c;当用户点击图案时&#xff0c;图案会旋转并缩小&#xff0c;同时背景颜色会变成白色。 Code <div class"love"><input id"switch" type"checkbox"><label class"love-heart&…

049.Python包和模块_虚拟环境超详细讲解

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

二叉树的层序遍历经典问题(算法村第六关白银挑战)

基本的层序遍历与变换 二叉树的层序遍历 102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入…

Java顺序表(1)

&#x1f435;本篇文章将对顺序表中的方法进行模拟实现 一、线性表 线性表是指在逻辑结构上呈连续的线性结构&#xff0c;而在物理结构上不一定是连续的结构&#xff0c;常见的线性表有&#xff1a;顺序表、链表、栈、队列等 二、顺序表 顺序表一般采用数组来存储数据&#x…

【STM32】| 01——常用外设 | USART

系列文章目录 【STM32】| 01——常用外设 | USART 失败了也挺可爱&#xff0c;成功了就超帅。 文章目录 前言1. 基础理论1.1 并行通信和串行通信1.2 同步通信和异步通信1.3 单工/半双工/全双工1.4 电平信号(RS232/TTL)和差分信号(RS485)1.5 端口(COM) 2. 串口理论2.1 串口物理…

Springboot+RocketMQ通过事务消息优雅的实现订单支付功能

目录 1. 事务消息 1.1 RocketMQ事务消息的原理 1.2 RocketMQ订单支付功能设计 1. 事务消息 RocketMQ的事务消息&#xff0c;是指发送消息事件和其他事件需要同时成功或同时失败。比如银行转账&#xff0c; A银行的某账户要转一万元到B银行的某账户。A银行发送“B银行账户增加…

高级分布式系统-第3讲 网络与网络互联

万维网的诞生 1957年10月4日&#xff0c; 苏联发射了人类第一颗人造卫星—斯普特尼克一号 美国政府震惊不已。 他们认为&#xff0c; 在日趋激烈的冷战对抗中&#xff0c; 自己已经全面落后于苏联。 为了扭转这一局面&#xff0c; 美国国防部很快于1958 年 2 月组建了一个神秘…