gin中使用gorm对数据库的基本操作

一、环境的配置

  • 1、github地址

  • 2、文档地址、中文官方

  • 3、安装依赖包

    go get -u gorm.io/gorm
    go get -u gorm.io/driver/mysql
    
  • 4、将gorm封装成一个工具方法

    package utils
    
    import (
    	"fmt"
    	_ "github.com/go-sql-driver/mysql"
    	"gorm.io/driver/mysql"
    	"gorm.io/gorm"
    )
    
    var GormDb *gorm.DB
    
    func init() {
           
    	var err error
    	sqlStr := "root:123456@tcp(localhost:3306)/beego?charset=utf8mb4&parseTime=true&loc=Local"
    	GormDb, err = gorm.Open(mysql.Open(sqlStr), &gorm.Config{
           })
    	if err != nil {
           
    		fmt.Println("数据库连接错误", err)
    		return
    	}
    }
    

二、在gin中对数据的增删改查

  • 1、定义与数据库表对应的结构体

    // 定义一个数据库对应的结构体
    type Student struct {
           
    	Id   int    `gorm:"primaryKey;autoIncrement" json:"id"`
    	Name string `gorm:"type:varchar(50);not null;unique" json:"name"`
    	Age  uint8  `gorm:"int(11)" json:"age"`
    }
    
  • 2、定义返回数据结构体

    // 定义返回数据结构体
    type Respons struct {
           
    	Code    int         `json:"code"`
    	Message string      `json:"message"`
    	Data    interface{
           } `json:"data"`
    }
    
    var response Respons
    
  • 3、在init函数中自动同步数据表

    func init() {
           
    	// 将go语言中的实体类映射到数据库(自动生成表)
    	utils.GormDb.AutoMigrate(&Student{
           })
    }
    
  • 4、添加数据

    func main() {
           
    	router := gin.Default()
    	router.POST("/student", createStudent)
    	router.Run(":9000")
    }
    
    // 创建学生
    func createStudent(c *gin.Context) {
           
    	var student Student
    	err := c.BindJSON(&student)
    	if err != nil {
           
    		response.Code = 1
    		response.Message = "解析前端数据错误"
    		c.JSON(http.StatusOK, response)
    		return
    	}
    	fmt.Println(student)
    	tx := utils.GormDb.Create(&student)
    	fmt.Println(tx)
    	if tx.RowsAffected > 0 {
           
    		response.Message = "创建成功"
    		c.JSON(http.StatusOK, response)
    		return
    	}
    	response.Message = "写入数据失败"
    	response.Code = 1
    	c.JSON(http.StatusOK, response)
    }
    
  • 4、根据id删除数据

    func deleteStudentById(c *gin.Context) {
           
    	id := c.Param("id")
    	var count int64
    	utils.GormDb.Model(&Student{
           }).Where("id=?", id).Count(&count)
    	if count <= 0 {
           
    		response.Code = 1
    		response.Message = "传递的ID错误"
    		c.JSON(http.StatusOK, response)
    		return
    	}
    	// 删除数据
    	tx := utils.GormDb.Where("id=?", id).Delete(&Student{
           })
    	fmt.Println(tx)
    	if tx.RowsAffected > 0 {
           
    		response.Message = "删除成功"
    		c.JSON(http.StatusOK, response)
    		return
    	}
    	response.Code = 1
    	response.Message = "删除失败"
    	c.JSON(http.StatusOK, response)
    }
    
  • 5、根据id修改数据

    func modifyStudentById(c *gin.Context) {
           
    	id := c.Param("id")
    	var student Student
    	err := c.BindJSON(&student)
    	if err != nil {
           
    		fmt.Println(err)
    		response.Code = 1
    		response.Message = "解析数据错误"
    		c.JSON(http.StatusOK, response)
    		return
    	}
    	var count int64
    	utils.GormDb.Model(&Student{
           }).Where("id=?", id).Count(&count)
    	if count <= 0 {
           
    		response.Code = 1
    		response.Message = "传递的ID错误"
    		c.JSON(http.StatusOK, response)
    		return
    	}
    	// 更新数据
    	tx := utils.GormDb.Model(&Student{
           }).Where("id=?", id).Updates(&student)
    	if tx.RowsAffected > 0 {
           
    		response.Message = "更新成功"
    		c.JSON(http.StatusOK, response)
    		return
    	}
    	response.Code = 1
    	response.Message = "更新失败"
    	c.JSON(http.StatusOK, response)
    }
    
  • 6、根据id查询一条数据

    func findStudentById(c *gin.Context) {
           
    	id := c.Param("id")
    	// studeng := Student{} 或者和下面的写法一样的
    	var student Student
    	tx := utils.GormDb.Where("id=?", id).First(&student)
    	if tx.Error != nil {
           
    		fmt.Println(tx.Error)
    		response.Code = 1
    		response.Message = "查询数据错误"
    		c.JSON(http.StatusOK, response)
    		return
    	}
    	response.Message = "查询成功"
    	response.Data = student
    	c.JSON(http.StatusOK, response)
    }
    
  • 7、查询多条数据

    func studentList(c *gin.Context) {
           
    	// 定义一个切片来存储查询出来的数据
    	student := make([]Student, 10)
    	tx := utils.GormDb.Find(&student)
    	if tx.Error != nil {
           
    		response.Code = 1
    		response.Message = "查询数据错误"
    		c.JSON(http.StatusOK, response)
    		return
    	}
    	response.Message = "查询成功"
    	response.Data = student
    	c.JSON(http.StatusOK, response)
    }
    

你可能感兴趣的:(go,go)