gorm实现CRUD和自己动手写一个简易的gorm | 青训营
什么是gorm?
GORM 代表“Go 对象关系映射”,它是 Go 编程语言 (Golang) 的流行 ORM(对象关系映射)库。ORM 是一种编程技术,允许开发人员使用面向对象的范例与关系数据库进行交互,从而无需手动编写原始 SQL 查询。GORM 提供了强大且易于使用的 API,用于执行数据库操作,例如查询、插入、更新和删除记录,而无需显式编写 SQL 语句。
gorm如何实现CRUD
以下是如何在 Golang 中使用 GORM 实现 CRUD(创建、读取、更新、删除)操作的分步指南:
- 安装GORM和数据库驱动:首先,您需要安装GORM和您要使用的数据库驱动(例如MySQL、PostgreSQL、SQLite)。这里我以MySQL为例进行演示:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
- 设置 GORM 数据库连接:使用 GORM 创建数据库连接。将
your_username、your_password、your_database、 和替换your_host为实际MySQL数据库凭据。
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
)
func main() {
dsn := "your_username:your_password@tcp(your_host)/your_database?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal("Failed to connect to database:", err)
}
// ... ...
}
定义 GORM 模型:创建一个表示数据库表的 Go 结构体。结构中的每个字段对应于表中的一列。使用标签来定义表名、主键和其他约束。
package main
import "time"
type User struct {
ID uint `gorm:"primarykey"`
FirstName string `gorm:"column:first_name"`
LastName string `gorm:"column:last_name"`
Email string `gorm:"column:email"`
CreatedAt time.Time
UpdatedAt time.Time
}
创建记录(Create操作):要在数据库中创建一条新记录,使用Create的方法。
func createUser(db *gorm.DB) {
user := User{
FirstName: "John",
LastName: "Doe",
Email: "john@example.com",
}
if err := db.Create(&user).Error; err != nil {
log.Println("Error creating user:", err)
} else {
log.Println("User created successfully.")
}
}
读取记录(Read操作):要从数据库中获取记录,可以使用GORM的FindorFirst方法
func getUser(db *gorm.DB, id uint) {
var user User
if err := db.First(&user, id).Error; err != nil {
log.Println("Error fetching user:", err)
} else {
log.Println("User:", user)
}
}
更新记录(Update操作):要更新一条已有的记录,可以使用Save的方法。
func updateUser(db *gorm.DB, id uint, firstName, lastName string) {
var user User
if err := db.First(&user, id).Error; err != nil {
log.Println("Error fetching user:", err)
return
}
user.FirstName = firstName
user.LastName = lastName
if err := db.Save(&user).Error; err != nil {
log.Println("Error updating user:", err)
} else {
log.Println("User updated successfully.")
}
}
删除记录(Delete操作):删除一条记录,使用Delete的方法
func deleteUser(db *gorm.DB, id uint) {
if err := db.Delete(&User{}, id).Error; err != nil {
log.Println("Error deleting user:", err)
} else {
log.Println("User deleted successfully.")
}
}
想更加了解gorm,不妨自己动手写一个简易的gorm?
下面是我自己实现的一个简易的gorm,可以当作练手看一下,源码里面都有详细的注释,如果觉得对大家有帮助不妨点个star支持一下
🚀功能
- 连接数据库
NewDB - 链式调用
xianorm标签指定字段名- 设置表名
Table - 设置
Select语句 - 条件查询
Where - crud,其中查询有两种方式
Query返回map,Find(&result) - 设置限制
Limit - 聚合查询
Count/Max/Min/Avg/Sum - 排序
Order - 分组
Group - 分组后判断
Having - 事务
Begin/Commit/Rollback - 单元测试