-
每日一库:GORM简介
GORM(Go Object-Relational Mapping)是一个用于Go语言的ORM库,它提供了一种简单、优雅的方式来操作数据库。GORM支持多种数据库,包括MySQL、PostgreSQL、SQLite和SQL Server。以下是GORM的一些主要特性:
- 全功能ORM:GORM支持全功能的ORM操作,包括关联、事务、迁移、批量插入、预加载、复合主键等。
- 开箱即用:GORM的设计目标是开箱即用,它提供了许多默认行为,使得开发者可以快速上手。
- 链式操作:GORM支持链式操作,这使得代码更加简洁和易读。
- 自动迁移:GORM可以自动迁移数据库,这意味着你可以通过代码来创建、更新和删除数据库表。
- Hooks:GORM支持在执行数据库操作前后执行自定义的Hook函数。
- 预加载:GORM支持预加载,这意味着你可以一次性查询出关联的数据,而不需要多次查询。
- 事务:GORM支持数据库事务,你可以很容易地开始、提交或回滚一个事务。
- 日志:GORM提供了详细的日志,你可以看到每一次的数据库操作。
- 扩展性:GORM提供了许多接口,你可以通过实现这些接口来扩展GORM的功能。
- 测试: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://gorm.io/docs/index.html。
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
https://www.cnblogs.com/lianshuiwuyi/p/17611782.html
author: mengbin
blog: mengbin
github: https://mengbin92.github.io/
cnblogs: 恋水无意
出处:
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式