数据库框架GORM快速入门【干货】

1.安装依赖
(1)安装GORM框架

go get -u gorm.io/gorm

(2)安装不同的数据库驱动(根据实际情况选择)

go get -u gorm.io/driver/mysql
go get -u gorm.io/driver/postgres
go get -u gorm.io/driver/sqlite
go get -u gorm.io/driver/sqlserver

2.示例(以mysql为例)
注意:除了连接数据库的操作,其余操作对于所有GORM支持的数据库是通用的。

package mainimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm"
)// 数据库连接设置
var (UserName = "root"Password = "123456"Host     = "localhost" //本地数据库地址Port     = "3306"      //默认端口DBName   = "db01"
)// 定义数据库表的字段
type User struct {ID    int    `gorm:"primaryKey"` // 主键字段,GORM 会自动识别Name  string // 用户名字段Age   int    // 年龄字段Email string // 邮箱字段
}// 初始化数据库连接
func InitDB() (*gorm.DB, error) {// 数据源名称,包含用户名、密码、数据库名等信息dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",UserName, Password, Host, Port, DBName)// 连接数据库db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {return nil, err}return db, nil
}// 根据 ID 查询用户
func QueryUser(db *gorm.DB, id int) (*User, error) {var user User // 创建一个 User 变量用于存放查询结果// db.First() 根据主键查找用户,找到的第一个记录会赋值给 usererr := db.First(&user, id).Errorreturn &user, err
}// 根据年龄查询多个用户
func QueryUsers(db *gorm.DB, age int) ([]User, error) {var users []User // 创建一个切片,用于存放查询到的多个用户// db.Where() 构造查询条件,db.Find() 执行查询并将结果赋值给 userserr := db.Where("age = ?", age).Find(&users).Errorreturn users, err
}func main() {db, err := InitDB() // 初始化数据库连接if err != nil {fmt.Println("Database connection failed:", err)return}// 进行数据库迁移,即将结构体转换为数据库中的表,// 表名为结构体名小写+sif err := db.AutoMigrate(&User{}); err != nil {fmt.Println("Database migration failed:", err)return}// 创建新用户newUser := &User{Name: "Alice", Age: 25,Email: "alice@example.com"} // 创建用户对象// db.Create() 会将 user 对象插入到数据库中if err := db.Create(newUser).Error; err != nil {fmt.Println("Error creating user:", err)return}// 查询用户user, err := QueryUser(db, newUser.ID) // 根据新用户的 ID 查询if err != nil {fmt.Println("Error querying user:", err)return}fmt.Println("Queried User:", user) // 打印查询结果// 查询多个用户users, err := QueryUsers(db, 25) // 查询年龄为 25 的用户if err != nil {fmt.Println("Error querying users:", err)return}fmt.Println("Users with age 25:", users) // 打印查询到的用户列表// 更新用户信息user.Age = 26 // 修改用户年龄// db.Save() 会根据主键更新用户信息if err := db.Save(user).Error; err != nil {fmt.Println("Error updating user:", err)return}// 删除用户// db.Delete() 根据主键删除用户记录if err := db.Delete(&User{}, user.ID).Error; err != nil {fmt.Println("Error deleting user:", err)return}fmt.Println("User deleted successfully.")
}

3.CURD总结
C:Create(增加),U:Update(更新),R:Read(查询),D:Delete(删除)

db.Create(newUser)//增加新对象,newUser是结构体指针
db.Save(user)//更新指定对象,user是结构体指针
db.First(&user, id)//根据主键查询单个对象
db.Where("age = ?", age).Find(&users)//按条件查询多个对象,注意users是切片
db.Delete(&User{}, user.ID)//根据主键删除单个对象

注意:查询操作必须传入指针才能获取结果,其他操作也建议传入指针。

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

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

相关文章

ChartCheck: Explainable Fact-Checking over Real-World Chart Images

论文地址: https://aclanthology.org/2024.findings-acl.828.pdfhttps://aclanthology.org/2024.findings-acl.828.pdf 1.概述 事实验证技术在自然语言处理领域获得了广泛关注,尤其是在针对误导性陈述的检查方面。然而,利用图表等数据可视化来传播信息误导的情况却很少受到…

【简历】25届浙江某211大学JAVA简历:明明项目有货,但是长篇大论减分!!

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 另外:我们出这一系列校招简历指导的原因,就是看很多学生被忽悠,没有先定位大厂、中厂还是小公司,导…

京准电钟HR-901GB双GPS北斗卫星时钟服务器

京准电钟HR-901GB双GPS北斗卫星时钟服务器 京准电钟HR-901GB双GPS北斗卫星时钟服务器 作为国家电力系统最重要的设备之一,卫星时间同步装置随着电力行业的发展不断有了新的要求,从单纯的具备时间数据输出能力,发展到装置状态信息上送、对用时设备的对时质量进行监测,确保站点内…

Logistic回归(分类)问题探讨与实践

说明 在本专栏机器学习_墨#≯的博客-CSDN博客之前的博文中,已经对感知机[1]、SVM[2]以及线性回归问题[3]做过探讨和实践。感知机以及SVM是用来做分类的,线性回归是用来做拟合的。本文将要探讨的Logistic回归(逻辑回归)则是使用线性回归的方法来做分类(二…

90V转5V4A同步降压芯片WT6037

90V转5V4A同步降压芯片WT6037 WT6037 被定义为一款高压同步降压转换器,其设计可在 10V 至 90V 的宽泛工作电压区间内稳定运行。该转换器尤其适用于需承受宽电压输入范围的电池组系统,诸如 12V 至 72V 的电池组,以及 60V 至 90V 的降压应用场…

docker搭建etcd集群环境方式

docker搭建etcd集群环境方式 from: etcd 虚拟机与docker搭建etcd集群环境方式_docker部署etcd集群-CSDN博客 windows系统下 1: “\”要换成:“^” 2: 不能在windows powershell下执行

安全见闻(5)——开阔眼界,不做井底之蛙

安全见闻五:人工智能 内容预览 ≧∀≦ゞ 安全见闻五:人工智能声明导语一、人工智能基础机器学习基础机器学习的典型工作流程1. 数据收集2. 数据预处理3. 模型选择与训练4. 模型评估与优化5. 模型应用 深度学习基础深度学习基本原理1. 神经网络基础2. 多层…

DOL 电机启动器接触器选择和选型

接触器连接在断路器和热过载保护继电器之间。接触器的选型和选择过程与断路器在计算满载电流和计算额定电流方面的过程类似。不同之处在于市场上可用组件的选择表。 从断路器的选型和选型中,我们发现: 电机尺寸 6HP 功率(P)4476W 电机FLC7.78A 断路…

Linux经常使用命令汇总和总结

Linux经常使用命令汇总和总结 文章目录 Linux经常使用命令汇总和总结一、基本命令二、目录操作命令三、文件操作命令四、压缩文件操作五、查找命令六、su、sudo七、系统服务八、网络管理九、定时任务指令crontab 配置十、其他命令 一、基本命令 1.1 关机和重启 关机 shutdown …

汽车免拆诊断案例 | 2019 款奥迪 A6L 车行驶中偶发熄火

故障现象  一辆2019款奥迪A6L车,搭载2.0T发动机,累计行驶里程约为9万km。车主反映,车辆行驶中偶发熄火,故障频率较高。 故障诊断  接车后试车,起动发动机,可以正常起动着机。使用故障检测仪检测&#x…

一起搭WPF架构之完结总结篇

一起搭WPF架构之完结总结篇 前言设计总结设计介绍页面一页面二页面三 结束 前言 整体基于WPF架构,根据自己的需求简单设计与实现了衣橱的数据统计、增加与读取数据、并展示数据的小软件。我知道自己在设计方面还有很多不足,暂时先做到这里了&#xff0c…

ubuntu启用ssh

在Ubuntu上启用SSH服务,你需要安装OpenSSH服务器软件包,然后启动并使SSH服务在启动时自动运行。 更新软件包列表: sudo apt update安装OpenSSH服务器软件包: sudo apt install openssh-server确认SSH服务正在运行: …

MySQL中SQL的执行顺序

MySQL中SQL的执行顺序 在日常的开发工作中,我们经常会自己手写一些sql语句,但是对于这些sql语句是怎么执行的,执行的顺序又是怎么样的呢?想必各位大佬对此也是了解的,所以对sql语言的执行顺序有一定的了解的话&#x…

【SQL|大数据|数据清洗|过滤】where条件中 “ != “ 和 “ NOT IN() ” 对NULL的处理

对数据进行清洗过滤的时候,NULL往往是一个很特殊的存在,对NULL值的存在通常有以下三种方式 1、保留NULL 2、过滤掉NULL 3、将NULL替换为其他符合业务需求的默认常量 下面是一些常用处理NULL的方式: 如下图所示数据源: car_vin&…

天锐绿盾与Ping32内网安全保护能力对比,选择最优方案

在数字化时代,企业内网安全面临着越来越多的挑战。有效保护内网数据安全,防止信息泄露和外部攻击至关重要。今天,我们将对比天锐绿盾和Ping32这两款内网安全保护软件,帮助您选择最适合的解决方案。 1. 安全防护机制 Ping32 Ping…

熔解曲线技术路线简介

在实时荧光定量PCR(qPCR)实验中,当双链DNA受热时,其互补碱基之间的氢键会逐渐断裂,导致双链分离成两条单链,这一过程被称为DNA的“熔解”。 总的DNA双螺旋结构降解一半的温度称为熔解温度(Tm&a…

pytorch nn.NLLLoss和nn.CrossEntropyLoss函数区别

nn.CrossEntropyLoss(交叉熵损失函数) 和nn.NLLLoss (负对数似然损失函数)的区别 输入格式: nn.CrossEntropyLoss:直接接受未归一化的 logits 作为输入,并在内部自动应用 log_softmax 来计算对数概率。nn.NLLLoss:接受对数概率(log-probabilities)作为输入,也就是说,输…

游戏推荐业务中基于 sentinel 的动态限流实践

作者:来自 vivo 互联网服务器团队- Gao Meng 本文介绍了一种基于 sentinel 进行二次开发的动态限流解决方案,包括什么是动态限流、为什么需要引入动态限流、以及动态限流的实现原理。 一、背景 1.1 当前的限流方案 随着互联网的发展及业务的增长&…

python基础综合案例(数据可视化-地图可视化)

1.基础地图使用 注意写名字的时候要写全名,比如上海市不能写出上海,不然看不到数据 鼠标点击即可看到数据 设置属性的时候不要忘记导包 # 演示地图可视化的基础使用 from pyecharts.charts import Map from pyecharts.options import VisualMapOpts # 准…

C语言入门-选择结构

在编程中,我们经常需要根据不同的条件执行不同的操作。C语言为此提供了几种非常实用的选择结构:条件运算符、逻辑运算、if语句和switch语句。接下来,让我们深入探讨这些重要的知识点,帮助你更好地理解和掌握C语言的选择结构。 1.…