代码改变世界

gin实现简单的crud操作

2025-02-09 18:27  luoguoling  阅读(22)  评论(0)    收藏  举报

一.前期准备

1.工具 goland,mysql,apipost

2.技术栈 gin,gorm

3.代码实现

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
	"strconv"
	"time"
)

func main() {
	dsn := "root:rolinabc123@tcp(127.0.0.1:3306)/crud?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			SingularTable: true,
		},
	})
	if err != nil {
		fmt.Println(err)
	}
	sqlDB, err := db.DB()
	sqlDB.SetMaxIdleConns(10)
	sqlDB.SetMaxOpenConns(100)
	sqlDB.SetConnMaxLifetime(time.Second)
	//定义结构体
	type List struct {
		gorm.Model
		Name    string `gorm:"type:varchar(20);not null" json:"name" binding:"required"`
		State   string `gorm:"type:varchar(20);not null" json:"state" binding:"required"`
		Phone   string `gorm:"type:varchar(20);not null" json:"phone" binding:"required"`
		Email   string `gorm:"type:varchar(20);not null" json:"email" binding:"required"`
		Address string `gorm:"type:varchar(20);not null" json:"address" binding:"required"`
	}
	db.AutoMigrate(List{})
	r := gin.Default()
	PORT := "3001"
	r.GET("/", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "请求成功",
		})
	})
	//新增
	r.POST("/user/add/", func(c *gin.Context) {
		var data List
		if err := c.ShouldBind(&data); err != nil {
			c.JSON(200, gin.H{
				"message": err.Error(),
				"code":    400,
			})
		} else {
			db.Create(&data) //创建数据
			c.JSON(200, gin.H{
				"message": "success",
				"code":    200,
				"data":    data,
			})

		}
	})
	//删除
	r.DELETE("/user/delete/:id", func(c *gin.Context) {
		var data []List
		id := c.Param("id")
		db.Where("id = ?", id).Find(&data)
		if len(data) > 0 {
			db.Where("id = ?", id).Delete(&data)
			c.JSON(200, gin.H{
				"message": "success",
				"code":    200,
			})
		} else {
			c.JSON(200, gin.H{
				"message": "fail,id不存在",
				"code":    400,
			})
		}

	})
	//更新
	r.PUT("/user/update/:id", func(c *gin.Context) {
		var data List
		id := c.Param("id")
		db.Select("id").Where("id = ?", id).Find(&data)
		if data.ID == 0 {
			c.JSON(200, gin.H{
				"message": "id不存在",
				"code":    400,
			})
		} else {
			err := c.ShouldBind(&data)
			if err != nil {
				c.JSON(200, gin.H{
					"message": err.Error(),
					"code":    400,
				})
			} else {
				db.Where("id = ?", id).Updates(&data)
				c.JSON(200, gin.H{
					"message": "success",
					"code":    200,
				})
			}
		}

	})
	//条件查询
	r.GET("/user/list/:name", func(c *gin.Context) {
		var dataList []List
		name := c.Param("name")
		db.Where("name = ?", name).Find(&dataList)
		if len(dataList) == 0 {
			c.JSON(200, gin.H{
				"message": "数据未查询到",
				"code":    400,
			})
		} else {
			c.JSON(200, gin.H{
				"message": "success",
				"code":    200,
				"data":    dataList,
			})
		}
	})
	//分页查询
	r.GET("/user/list", func(c *gin.Context) {
		var dataList []List
		var total int64
		pageSize, _ := strconv.Atoi(c.Query("pageSize"))
		pageNo, _ := strconv.Atoi(c.Query("pageNo"))
		if pageSize == 0 {
			pageSize = -1
		}
		if pageNo == 0 {
			pageNo = -1
		}
		offset := (pageNo - 1) * pageSize
		if pageSize == -1 && pageNo == -1 {
			offset = -1

		}
		db.Model(dataList).Count(&total).Limit(pageSize).Offset(offset).Find(&dataList)
		if len(dataList) == 0 {
			c.JSON(200, gin.H{
				"message": "没有数据",
				"code":    400,
			})
		} else {
			c.JSON(200, gin.H{
				"message":  "success",
				"code":     200,
				"data":     dataList,
				"total":    total,
				"pageSize": pageSize,
				"pageNo":   pageNo,
			})
		}

	})

	r.Run(":" + PORT)
}