gorm实现CRUD和自己动手写一个简易的gorm | 青训营

130 阅读3分钟

gorm实现CRUD和自己动手写一个简易的gorm | 青训营

什么是gorm?

GORM 代表“Go 对象关系映射”,它是 Go 编程语言 (Golang) 的流行 ORM(对象关系映射)库。ORM 是一种编程技术,允许开发人员使用面向对象的范例与关系数据库进行交互,从而无需手动编写原始 SQL 查询。GORM 提供了强大且易于使用的 API,用于执行数据库操作,例如查询、插入、更新和删除记录,而无需显式编写 SQL 语句。

gorm如何实现CRUD

以下是如何在 Golang 中使用 GORM 实现 CRUD(创建、读取、更新、删除)操作的分步指南:

  1. 安装GORM和数据库驱动:首先,您需要安装GORM和您要使用的数据库驱动(例如MySQL、PostgreSQL、SQLite)。这里我以MySQL为例进行演示:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

  1. 设置 GORM 数据库连接:使用 GORM 创建数据库连接。将your_usernameyour_passwordyour_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支持一下

项目地址:github.com/liuxianlove…

🚀功能

  • 连接数据库NewDB
  • 链式调用
  • xianorm 标签指定字段名
  • 设置表名 Table
  • 设置 Select 语句
  • 条件查询 Where
  • crud,其中查询有两种方式 Query 返回 mapFind(&result)
  • 设置限制 Limit
  • 聚合查询Count/Max/Min/Avg/Sum
  • 排序 Order
  • 分组 Group
  • 分组后判断 Having
  • 事务 Begin/Commit/Rollback
  • 单元测试

🎉感谢

青训营-青春造梦,技术未来 (bytedance.com)