Go GORM简介

news2025/2/28 13:01:29

GORM(Go Object-Relational Mapping)是一个用于Go语言的ORM库,它提供了一种简单、优雅的方式来操作数据库。GORM支持多种数据库,包括MySQL、PostgreSQL、SQLite和SQL Server。以下是GORM的一些主要特性

  1. 全功能ORM:GORM支持全功能的ORM操作,包括关联、事务、迁移、批量插入、预加载、复合主键等。
  2. 开箱即用:GORM的设计目标是开箱即用,它提供了许多默认行为,使得开发者可以快速上手。
  3. 链式操作:GORM支持链式操作,这使得代码更加简洁和易读。
  4. 自动迁移:GORM可以自动迁移数据库,这意味着你可以通过代码来创建、更新和删除数据库表。
  5. Hooks:GORM支持在执行数据库操作前后执行自定义的Hook函数。
  6. 预加载:GORM支持预加载,这意味着你可以一次性查询出关联的数据,而不需要多次查询。
  7. 事务:GORM支持数据库事务,你可以很容易地开始、提交或回滚一个事务。
  8. 日志:GORM提供了详细的日志,你可以看到每一次的数据库操作。
  9. 扩展性:GORM提供了许多接口,你可以通过实现这些接口来扩展GORM的功能。
  10. 测试:GORM提供了方便的测试工具,你可以很容易地为你的代码编写测试。

以下是一些基本的GORM操作:

1. 安装GORM

在Go项目中,你可以使用以下命令来安装GORM:

$ go get -u gorm.io/gorm

2. 连接到数据库

GORM支持多种类型的数据库,例如MySQL,SQLite,PostgreSQL等。下面是一个连接MySQL数据库的示例:

package main
 
import (
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)
 
func main() {
    dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
}

3. 定义模型

在GORM中,你可以通过定义Go结构体来创建数据库表。例如:

type Product struct {
    gorm.Model
    Code  string
    Price uint
}

然后,你可以使用 AutoMigrate 函数来自动创建表:

db.AutoMigrate(&Product{})

4. 创建记录

使用 Create 函数可以在数据库中创建新的记录:

db.Create(&Product{Code: "D42", Price: 100})

5. 读取记录

GORM提供了多种方法来查询数据库中的记录。例如:

// 获取第一条记录,按主键排序
var product Product
db.First(&product, 1) // 查询id为1的product
 
// 获取最后一条记录
db.Last(&product)
 
// 获取所有记录
var products []Product
db.Find(&products)
 
// 使用条件查询
db.Where("price = ?", 100).First(&product)

6. 更新记录

你可以使用 Save 或 Updates 函数来更新数据库中的记录:

// 更新product的price
db.Model(&product).Update("Price", 200)
 
// 更新多个字段
db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) // 非零字段
db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})

7. 删除记录

使用 Delete 函数可以删除数据库中的记录:

db.Delete(&product, 1)

以上是GORM的基本使用方法,其他可以参考GORM官方文档

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

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

相关文章

leetCode 47. 全排列 II + 回溯算法 + 图解 + 笔记

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1]] 示例 2: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2…

uniapp 微信小程序连接蓝牙卡死

解决方法,需要同意隐私保护协议,否则不能开启蓝牙权限和定位权限,会导致定位失败

.NET8构建统计Extreme Optimization Numerical Libraries

为 .NET 8 构建统计应用程序 Extreme Optimization Numerical Libraries for .NET V8.1.22 添加了对 .NET 8 的支持,使您可以使用最新版本的 Microsoft 平台。 Extreme Optimization Numerical Libraries for .NET 是通用数学和统计类的集合,为技术和统计…

基于 Python+flask 构建态势感知系统(附完整源码)

一、开发 一个基于linux的态势感知系统,基于python和flask框架开发,项目文件目录如下: admin -核心算法 charts -图表生成 model -类 app.py -主文件 config.py -配置文件 install.py -安装文件 二、安装 1、配置 数据库密码默认设…

进程的创建:fork()

引入 创建进程的方式我们已经学习了一个!在我们运行指令(或者运行我们自己写的可执行程序)的时候不就是创建了一个进程嘛?那个创建进程的方式称为指令级别的创建子进程! 那如果我们想要在代码中创建进程该怎么办呢? fork() for…

SSM框架(五):Maven进阶

文章目录 一、分模块开发1.1 分模块开发的意义1.2 步骤 二、依赖管理2.1 依赖传递2.2 可选依赖和排除依赖 三、继承与聚合3.1 聚合3.2 继承3.3 聚合和继承区别 四、属性4.1 pom文件的依赖使用属性4.2 资源文件使用属性 五、多环境开发六、跳过测试七、私服7.1 下载与使用7.2 私…

禁止谷歌浏览器自动更新

禁止谷歌浏览器自动更新 在使用Python包selenium的时候浏览器版版本发生变化后产生很多问题如: 1、直接版本不对应无法运行 2、版本不一致导致debug启动浏览器超级慢 这里是已谷歌浏览器为代表的。 禁止自动更新的方法如下: 1、WinR调出运行&#x…

一小时玩转【负载均衡】

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不…

SpringBoot 是如何启动一个内置的Tomcat

为什么说Spring Boot框架内置Tomcat 容器,Spring Boot框架又是怎么样去启动Tomcat的?我简单总结下学习过程。 一:简单了解SpringBoot的启动类 我们都知道Spring Boot框架的启动类上是需要使用 @SpringBootApplication 注解标注的, @SpringBootApplication 是一个复合注解…

Redis--10--Pipeline

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Pipeline举例比较普通模式与 PipeLine 模式小结: Pipeline 前面我们已经说过,Redis客户端执行一条命令分为如下4个部分:1)发送命…

前端入门(五)Vue3组合式API特性

文章目录 Vue3简介创建Vue3工程使用vite创建vue-cli方式 常用 Composition API启动项 - setup()setup的执行时机与参数 响应式原理vue2中的响应式vue3中的响应式ref函数reactive函数reactive与ref对比 计算属性 - computed监视属性 - watchwatchEffect Vue3生命周期自定义hook函…

滑动平均窗口的定义,优点,缺点,以及目前的应用!!

文章目录 前言一、滑动平均窗口的优点二、滑动平均窗口的缺点三、滑动平均窗口的应用 前言 滑动平均窗口是一种数据处理方法,它以固定的窗口大小对数据进行移动,并在每个窗口内计算数据的平均值。这种方法主要用于平滑数据,减小数据波动的影…

基于SpringBoot的仓库管理系统设计与实现附带源码和论文

博主24h在线,想要源码文档部署视频直接私聊,全网最低价,9.9拿走! 【关键词】仓库管理系统,jsp编程技术,mysql数据库,SSM,Springboot 目 录 摘 要 Abstract 第1章 绪论 1.1 课题…

阿里云服务器跨区域迁移(多数据盘)

方法一. 复制镜像,共享镜像(只有系统盘没有数据盘的情况!) 正常阿里云同区域服务器迁移只需要选择共享镜像即可,但是由于新老服务器区域限制所以需要先复制到新服务器区域再进行共享 选择服务器实例先创建后复制 比如…

Linux 内核源码各版本下载

下载地址: kernel/git/stable/linux.git - Linux kernel stable treehttps://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/refs/ 1. Linux 内核的基本概念: 内核是什么? 内核是操作系统的核心部分,负责管理系统…

网络虚拟化场景下网络包的发送过程

网络虚拟化有和存储虚拟化类似的地方,例如,它们都是基于 virtio 的,因而在看网络虚拟化的过程中,会看到和存储虚拟化很像的数据结构和原理。但是,网络虚拟化也有自己的特殊性。例如,存储虚拟化是将宿主机上…

物流单管理系统软件物流单打印,物流单打印模板,佳易王物流快运单管理软件下载

物流单管理系统软件物流单打印,物流单打印模板,佳易王物流快运单管理软件下载 软件试用版下载或技术支持可以点击最下方官网卡片 上图:在物流开单时,可以先输入电话,如果之前存在该托运人信息,则可以一键…

hbase Master is initializing

问题如下: ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializingat org.apache.hadoop.hbase.master.HMaster.checkInitialized(HMaster.java:2452)at org.…

P1 什么是链表 C语言简单易懂

目录 前言 01 什么是链表 02 数组的特点 03 数组的缺点 3.1 删除数组其中一个元素 3.2 数组增加某个节点 04 链表 前言 🎬 个人主页:ChenPi 🐻推荐专栏1: 《 C 》✨✨✨ 🔥 推荐专栏2: 《 Linux C应用编程(概念…

Web自动化测试详解

做测试的同学们都了解,做Web自动化,我们主要用Selenium或者是QTP。 有的人可能就会说,我没这个Java基础,没有Selenium基础,能行吗?测试虽然属于计算机行业,但其实并不需要太深入的编程知识&…