gin gorm 数据模型

连接数据库

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

func ConnectSql() {
    dsn := "gosql:mypwd@tcp(127.0.0.1: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:"csev.@qq.com",
    Password:"1234567",
})

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

删除数据

//软删除只会在delete_at里增加删除时间
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{})
版权声明:
作者:89391311
链接:https://www.csev.cn/code-2/golang/20241203534.html
来源:彩色动力-测试分享
版权声明:本文欢迎任何形式转载,转载时完整保留本声明信息(包含原文链接、原文出处、原文作者、版权声明)即可。本文后续所有修改都会第一时间在原始地址更新。
THE END
根据我国《计算机软件保护条例》第十七条规定:“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。本站资源仅供个人学习交流,请于下载后 24 小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录
微信扫一扫关注蓝威网官方公众号

微信扫一扫关注蓝威网官方公众号