Gin+Gorm+Mysql 实现简单的CRUD API

简单的用户信息管理 RESTFul API
路由
GET : http://127.0.0.1:8080/user
POST : http://127.0.0.1:8080/user/create
GET : http://127.0.0.1:8080/user/list
GET : http://127.0.0.1:8080/user/update/:id
PUT : http://127.0.0.1:8080/user/find/:id
DELETE : http://127.0.0.1:8080/user/1
package main

import (
	"net/http"
	"github.com/gin-gonic/gin"
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

type User struct {
	Id	int `gorm:"AUTO_INCREMENT"` // 自增
	Name string `gorm:"size:255"` // string默认长度为255, 使用这种tag重设
	Age	int
}

var (
	db *gorm.DB
	err error
)

func main() {
	// 链接 mysql
	db, err = gorm.Open("mysql", "root:ts123456@tcp(127.0.0.1:3306)/gorm?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	} else {
		// 全局禁用表名复数
		db.SingularTable(true) // 如果设置为true,`User`的默认表名为`user`,使用`TableName`设置的表名不受影响

		// 一般不会直接用CreateTable创建表
		// 检查模型`User`表是否存在,否则为模型`User`创建表
		if !db.HasTable(&User{}) {
			if err := db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{}).Error; err !=nil {
				panic(err)
			}
		}
	}

	// 引入路由
	Router()
}

func Router() {
	router := gin.Default()
	// 路径映射
	router.GET("/user", InitPage)
	router.POST("/user/create", CreateUser)
	router.GET("/user/list", ListUser)
	router.PUT("/user/update/:id", UpdateUser)
	router.GET("/user/find/:id", GetUser)
	router.DELETE("/user/:id", DeleteUser)

	router.Run(":8080")
}

//每个路由都对应一个具体的函数操作,从而实现了对user的增,删,改,查操作
func InitPage(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"message": "OK!",
	})
}

// 创建用户
// curl -i -X POST -H "Content-Type: application/json" -d "{ \"name\": \"Vic\", \"age\": 20}" http://localhost:8080/user/create
func CreateUser(c *gin.Context) {
	var user User
	c.BindJSON(&user)	// 使用bindJson填充数据
	
	// db.Create(&user)	// 创建对象
	// c.JSON(http.StatusOK, &user)	// 返回页面	
	if user.Name != "" && user.Age > 0 {
        db.Create(&user)
        c.JSON(http.StatusOK, gin.H{"success": &user})
    } else {
        c.JSON(422, gin.H{"error": "Fields are empty"})
    }
}

// 更新用户
// curl -i -X PUT -H "Content-Type: application/json" -d "{ \"name\": \"Vc\", \"age\": 9}" http://localhost:8080/user/update/9
func UpdateUser(c *gin.Context) {
	var user User
	id := c.Params.ByName("id")
	err := db.First(&user, id).Error
	if err != nil {
		c.AbortWithStatus(404)
		fmt.Println(err.Error())
	} else {
		c.BindJSON(&user)
		db.Save(&user)	// 提交修改
		c.JSON(http.StatusOK, &user)	// 返回页面	
	}
}

// 列出所有用户
// http://127.0.0.1:8080/user/list
// curl -i http://localhost:8080/user/list
func ListUser(c *gin.Context) {
	var user []User
	db.Find(&user)
	c.JSON(http.StatusOK, &user)	//限制查找前line行
}

// 列出单个用户
// curl -i http://localhost:8080/user/find/18
func GetUser(c *gin.Context) {
	var user User
	id := c.Params.ByName("id")
	err := db.First(&user, id).Error
	if err != nil {
		c.AbortWithStatus(404)
		fmt.Println(err.Error())
	} else {
		c.JSON(http.StatusOK, &user)
	}
}

// 删除用户
// curl -i -X DELETE http://localhost:8080/user/1
func DeleteUser(c *gin.Context) {
	var user User
	id := c.Params.ByName("id")
	db.First(&user, id)
	if user.Id != 0 {
		db.Delete(&user)
		c.JSON(http.StatusOK, gin.H{
			"success": "User# " + id + " deleted!",
		})
	} else{
		c.JSON(404, gin.H{
			"error": "User not found",
		})
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值