找回密码
 立即注册
查看: 500|回复: 0

[后端] 使用Gin和Gorm实现CRUD操作

[复制链接]

279

主题

0

回帖

964

积分

超级版主

积分
964
发表于 2024-5-19 13:30:49 | 显示全部楼层 |阅读模式
本帖最后由 Shaw0xyz 于 2024-5-19 13:32 编辑

在现代Web开发中,高效处理数据并提供快速响应的API是非常重要的。在Go语言生态中,Gin和Gorm分别是流行的Web框架和ORM工具。本文将介绍如何使用Gin和Gorm实现基本的CRUD(创建、读取、更新、删除)操作。


环境准备

在开始之前,确保你已经安装了Go并设置了GOPATH。接下来,创建一个新的Go项目并安装Gin和Gorm:

  1. go mod init gin-gorm-crud
  2. go get -u github.com/gin-gonic/gin
  3. go get -u gorm.io/gorm
  4. go get -u gorm.io/driver/sqlite
复制代码

这里我们使用SQLite作为数据库,你也可以选择其他数据库驱动(如PostgreSQL、MySQL等)。

项目结构

项目结构如下:
  1. gin-gorm-crud/

  2. ├── main.go
  3. └── models/
  4.     └── user.go
复制代码

创建数据模型

在`models/`目录下创建一个`user.go`文件,定义User模型:

  1. package models

  2. import (
  3.         "gorm.io/gorm"
  4. )

  5. type User struct {
  6.         gorm.Model
  7.         Name  string `json:"name"`
  8.         Email string `json:"email"`
  9. }
复制代码

初始化Gorm和Gin

在`main.go`中初始化Gorm和Gin:

  1. package main

  2. import (
  3.         "gin-gorm-crud/models"
  4.         "gorm.io/driver/sqlite"
  5.         "gorm.io/gorm"
  6.         "github.com/gin-gonic/gin"
  7.         "net/http"
  8. )

  9. var DB *gorm.DB

  10. func initDB() {
  11.         var err error
  12.         DB, err = gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
  13.         if err != nil {
  14.                 panic("failed to connect database")
  15.         }

  16.         DB.AutoMigrate(&models.User{})
  17. }

  18. func main() {
  19.         initDB()

  20.         r := gin.Default()
  21.         r.GET("/users", getUsers)
  22.         r.GET("/users/:id", getUser)
  23.         r.POST("/users", createUser)
  24.         r.PUT("/users/:id", updateUser)
  25.         r.DELETE("/users/:id", deleteUser)
  26.         
  27.         r.Run()
  28. }
复制代码

实现CRUD处理函数

接下来,实现CRUD操作的处理函数:

读取用户

  1. func getUsers(c *gin.Context) {
  2.         var users []models.User
  3.         DB.Find(&users)
  4.         c.JSON(http.StatusOK, users)
  5. }

  6. func getUser(c *gin.Context) {
  7.         id := c.Param("id")
  8.         var user models.User
  9.         if err := DB.First(&user, id).Error; err != nil {
  10.                 c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})
  11.                 return
  12.         }
  13.         c.JSON(http.StatusOK, user)
  14. }
复制代码

创建用户

  1. func createUser(c *gin.Context) {
  2.         var user models.User
  3.         if err := c.ShouldBindJSON(&user); err != nil {
  4.                 c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  5.                 return
  6.         }
  7.         DB.Create(&user)
  8.         c.JSON(http.StatusCreated, user)
  9. }

  10. 更新用户

  11. func updateUser(c *gin.Context) {
  12.         id := c.Param("id")
  13.         var user models.User
  14.         if err := DB.First(&user, id).Error; err != nil {
  15.                 c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})
  16.                 return
  17.         }
  18.         if err := c.ShouldBindJSON(&user); err != nil {
  19.                 c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  20.                 return
  21.         }
  22.         DB.Save(&user)
  23.         c.JSON(http.StatusOK, user)
  24. }
复制代码

删除用户

  1. func deleteUser(c *gin.Context) {
  2.         id := c.Param("id")
  3.         var user models.User
  4.         if err := DB.First(&user, id).Error; err != nil {
  5.                 c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})
  6.                 return
  7.         }
  8.         DB.Delete(&user)
  9.         c.JSON(http.StatusOK, gin.H{"message": "User deleted"})
  10. }
复制代码

运行项目

完成以上步骤后,运行你的项目:

  1. go run main.go
复制代码

打开浏览器或使用Postman等工具访问`http://localhost:8080`,进行CRUD操作的测试:

- 创建用户:POST `/users`,请求体包含JSON格式的用户数据。
- 读取所有用户:GET `/users`
- 读取特定用户:GET `/users/:id`
- 更新用户:PUT `/users/:id`,请求体包含JSON格式的用户数据。
- 删除用户:DELETE `/users/:id`

结语

通过本文,你学习了如何使用Gin和Gorm实现基本的CRUD操作。这种组合非常适合Go语言的Web应用开发,既能高效处理HTTP请求,又能方便地操作数据库。

荔枝学姐爱吃荔枝!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系站长|Archiver|手机版|小黑屋|主机论坛

GMT+8, 2025-4-4 13:51 , Processed in 0.060758 second(s), 24 queries .

Powered by 主机论坛 HostSsss.Com

HostSsss.Com

快速回复 返回顶部 返回列表