gin框架实现增删改查
时间: 2025-01-17 12:52:42 浏览: 52
### 使用 Gin 框架实现 CRUD(增删改查)操作
#### 创建项目结构并初始化依赖项
为了使用 Gin 和 GORM 来处理 CRUD 操作,首先需要设置好 Go 项目的环境。安装必要的包:
```bash
go mod init example.com/gin-crud-demo
go get -u github.com/gin-gonic/gin
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
```
#### 定义数据模型
定义 `Product` 结构体作为数据库中的表模型[^2]。
```go
type Product struct {
gorm.Model
Code string
Price uint
}
```
#### 初始化数据库连接
建立与 SQLite 数据库的连接,并自动迁移模式以创建相应的表格。
```go
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
func InitDB() *gorm.DB {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 自动迁移模式
db.AutoMigrate(&Product{})
return db
}
```
#### 设置路由和控制器逻辑
编写 HTTP API 路由以及对应的业务逻辑函数来完成 CRUD 功能。
```go
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
var DB = InitDB()
// 获取所有产品列表
func GetProducts(c *gin.Context) {
var products []Product
result := DB.Find(&products)
if result.Error != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": result.Error})
return
}
c.JSON(http.StatusOK, products)
}
// 添加新产品
func CreateProduct(c *gin.Context) {
var input Product
if err := c.ShouldBindJSON(&input); err == nil {
createErr := DB.Create(&input).Error
if createErr != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": createErr})
return
}
c.JSON(http.StatusOK, input)
} else {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
}
}
// 更新指定ID的产品信息
func UpdateProduct(c *gin.Context) {
id := c.Params.ByName("id")
var product Product
if err := DB.Where("id = ?", id).First(&product).Error; err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Record not found!"})
return
}
updateErr := DB.Model(&product).Updates(Product{Code: c.PostForm("code"), Price: c.PostFormUint("price")}).Error
if updateErr != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": updateErr})
return
}
c.JSON(http.StatusOK, product)
}
// 删除指定ID的产品记录
func DeleteProduct(c *gin.Context) {
id := c.Params.ByName("id")
var product Product
d := DB.Delete(&product, id)
if d.Error != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": d.Error})
return
}
c.JSON(http.StatusOK, gin.H{"id #" + id: "deleted"})
}
func SetupRouter() *gin.Engine {
r := gin.Default()
apiV1 := r.Group("/api/v1")
{
apiV1.GET("/products", GetProducts)
apiV1.POST("/products", CreateProduct)
apiV1.PUT("/products/:id", UpdateProduct)
apiV1.DELETE("/products/:id", DeleteProduct)
}
return r
}
func main() {
router := SetupRouter()
router.Run(":8080")
}
```
此代码片段展示了如何利用 Gin 框架配合 GORM ORM 库执行基本的数据持久化任务——即所谓的 CRUD 操作。每种操作都对应着 RESTful 风格下的不同 URL 地址及其请求方法[^1]。
阅读全文
相关推荐




















