gin gorm 数据模型

GoLang gin gorm 学习笔记

连接数据库

import (
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
)

func ConnectSql() {
    dsn := "gosql:myalger@tcp(123.56.226.179:3306)/gosql?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open("mysql", dsn)
    if err!= nil{
        fmt.Println(err)
        panic(err)
    }
     defer db.Close()
}

创建表

type User struct {
	gorm.Model
	Name     string `json:"name"`
	Age      int    `json:"age"`
	Email    string `json:"email"`
	Password string `json:"password"`
}
db.AutoMigrate(&model.User{})

插入数据

db.Create(&model.User{
    Name: "gosql",
    Age: 18,
    Email: "1",
    Password: "1",
})

查询数据

var user model.User
db.Where("name = ?", "gosql").First(&user)
fmt.Println(user)

var user []model.User
db.Find(&user,"age<?",30)
db.Where("age<?",30).Find(&user)

查询关联表的数据

db.Preload("Teachers").Preload("IDCard").First(&student, id)

分页查询

type Page struct {
	PageNum  int    `form:"page_num"`
	PageSize int    `form:"page_size"`
	Keyword  string `form:"keyword"`
	Desc     bool   `form:"desc"`
}

r.GET("/student", func(ctx *gin.Context) {
    var p Page
    if ctx.ShouldBindQuery(&p) != nil {
        ctx.JSON(http.StatusUnauthorized, gin.H{
            "err_msg": "参数错误",
        })
        return
    }
    if p.PageNum <= 0 {
        p.PageNum = 1
    }
    var students []Student

    if err := db.Limit(p.PageSize).Offset((p.PageNum-1)*p.PageSize).Find(&students).Error; err != nil {
        ctx.JSON(http.StatusUnauthorized, gin.H{
            "err_msg":  err.Error(),
        })
    }
    var total int
    db.Model(&Student{}).Count(&total)
    pageNum := total / p.PageSize
    if total % p.PageSize != 0{
        pageNum++
    }
    ctx.JSON(http.StatusOK, gin.H{
        "code":200,
        "msg":"查询成功",
        "data": students,
        "total": total,
    })
})

指定返回的数据

type StudentResponse struct {
    StudentName string
}
r.GET("/student", func(ctx *gin.Context) {
    data := &[]*StudentResponse{}
    db.Table("students").Find(&data)
    ctx.JSON(http.StatusOK, data)
})

修改数据

// 修改
db.Where("id= ?",1).First(&model.User{}).Update("name","刘俊杰")
db.Where("id= ?",1).First(&model.User{}).Updates(&model.User{
    Name:"刘俊杰1",
    Age:28,
    Email:"aaa.@qq.com",
    Password:"1234567",
})

// 批量修改
db.Where("id in (?)",[]int{1,2}).Find(&[]model.User{}).Updates(map[string]interface{}{
    "Name":"刘俊杰2",
})

删除数据

db.Where("id= ?",1).Delete(&model.User{})
db.Where("id in (?)",[]int{1,2}).Delete(&[]model.User{})

// 硬删除
db.Where("id= ?",1).Unscoped().Delete(&model.User{})