Go GORM简介

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 复制代码
$ go get -u gorm.io/gorm

2. 连接到数据库

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

Go 复制代码
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结构体来创建数据库表。例如:

Go 复制代码
type Product struct {
    gorm.Model
    Code  string
    Price uint
}

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

Go 复制代码
db.AutoMigrate(&Product{})

4. 创建记录

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

Go 复制代码
db.Create(&Product{Code: "D42", Price: 100})

5. 读取记录

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

Go 复制代码
// 获取第一条记录,按主键排序
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 函数来更新数据库中的记录:

Go 复制代码
// 更新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 函数可以删除数据库中的记录:

Go 复制代码
db.Delete(&product, 1)

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

相关推荐
杜子不疼.40 分钟前
【Linux】基础IO(三):文件描述符与重定向
linux·c语言·开发语言·人工智能
时见先生8 小时前
Python库和conda搭建虚拟环境
开发语言·人工智能·python·自然语言处理·conda
a努力。8 小时前
国家电网Java面试被问:混沌工程在分布式系统中的应用
java·开发语言·数据库·git·mysql·面试·职场和发展
Yvonne爱编码8 小时前
Java 四大内部类全解析:从设计本质到实战应用
java·开发语言·python
wqwqweee8 小时前
Flutter for OpenHarmony 看书管理记录App实战:搜索功能实现
开发语言·javascript·python·flutter·harmonyos
yongui478349 小时前
基于MATLAB的NALM锁模光纤激光器仿真实现
开发语言·matlab
毕设源码-郭学长9 小时前
【开题答辩全过程】以 基于springboot 的豪华婚车租赁系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
-To be number.wan9 小时前
Python数据分析:numpy数值计算基础
开发语言·python·数据分析
Cx330❀10 小时前
【优选算法必刷100题】第038题(位运算):消失的两个数字
开发语言·c++·算法·leetcode·面试
Loo国昌10 小时前
深入理解 FastAPI:Python高性能API框架的完整指南
开发语言·人工智能·后端·python·langchain·fastapi