一.前期准备
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)
}