官方文档:https://gorm.io/zh_CN/docs/
create table student
(
id int auto_increment
primary key,
sn varchar(20) null,
name varchar(20) null,
email varchar(20) null,
class_id int null,
monitor_id int null
);
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
package model
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DB *gorm.DB
var err error
// Student 属性需大写
type Student struct {
Id int
Sn string
Name string
Email string
ClassId int
MonitorId int
}
func (s Student) TableName() string {
return "student"
}
func init() {
dsn := "root:Chace2233.@tcp(127.0.0.1:3306)/study?charset=utf8&parseTime=True&loc=Local"
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println(err)
}
fmt.Println(DB)
}
package controller
import (
"fmt"
"ginstudy/model"
"github.com/gin-gonic/gin"
"net/http"
"strconv"
)
type StudentController struct {}
func (student StudentController) Select(c *gin.Context) {
var users []model.Student
// 全量查询
//model.DB.Find(&users)
// 条件查询
model.DB.Where("id<6").Find(&users)
c.JSON(http.StatusOK, users)
}
func (student StudentController) Insert(c *gin.Context) {
var user = model.Student{Sn: "10019", Name: "aaa", Email: "[email protected]", ClassId: 1, MonitorId: 1}
tx := model.DB.Create(&user)
fmt.Println(tx.Error)
if tx.Error != nil {
c.JSON(http.StatusOK, gin.H{
"insert": "error",
"message": tx.Error,
})
} else {
c.JSON(http.StatusOK, gin.H{
"insert": "success",
})
}
}
func (student StudentController) Update(c *gin.Context) {
id, _ := strconv.Atoi(c.Param("id"))
// 修改方式1
//var user = model.Student{Id: id}
//model.DB.Find(&user)
//user.Name = "5A+"
//tx := model.DB.Save(&user)
//if tx.Error != nil {
// c.JSON(http.StatusOK, gin.H{
// "update": "error",
// "message": tx.Error,
// })
//} else {
// c.JSON(http.StatusOK, gin.H{
// "update": "success",
// })
//}
// 修改方式2
tx := model.DB.Model(&model.Student{}).Where("id=?", id).Update("name", "gorm")
if tx.Error != nil {
c.JSON(http.StatusOK, gin.H{
"update": "error",
"message": tx.Error,
})
} else {
c.JSON(http.StatusOK, gin.H{
"update": "success",
})
}
}
func (student StudentController) Delete(c *gin.Context) {
id, _ := strconv.Atoi(c.Param("id"))
var user = model.Student{Id: id}
tx := model.DB.Delete(&user)
if tx.Error != nil {
c.JSON(http.StatusOK, gin.H{
"delete": "error",
"message": tx.Error,
})
} else {
c.JSON(http.StatusOK, gin.H{
"delete": "success",
})
}
}
package router
import (
"ginstudy/controller"
"github.com/gin-gonic/gin"
)
func StudentRouter(r *gin.Engine) {
group := r.Group("/student")
studentController := controller.StudentController{}
{
group.GET("/", studentController.Select)
group.POST("/insert", studentController.Insert)
group.PUT("/update/:id", studentController.Update)
group.DELETE("/delete/:id", studentController.Delete)
}
}
type Student struct {
Id int `json:"id"`
Sn string `json:"sn"`
Name string `json:"name"`
Email string `json:"email"`
ClassId int `json:"class-id"`
MonitorId int `json:"monitor-id"`
}
func (student StudentController) Select(c *gin.Context) {
var users []model.Student
// 全量查询
//model.DB.Find(&users)
// 条件查询1
//model.DB.Where("id<6").Find(&users)
//model.DB.Where("id", 6).Find(&users)
// 条件查询2
//model.DB.Where("id>1 and id<5").Find(&users)
//model.DB.Where("id>? and id<=?", 1, 5).Find(&users)
// 条件查询3
//model.DB.Where("id in (?)", []int{1, 5}).Find(&users)
// 条件查询4
//model.DB.Where("name like ?", "%zhou%").Find(&users)
// 条件查询5
//model.DB.Where("id between ? and ?", 1, 3).Find(&users)
// 条件查询6
//model.DB.Where("id = ? or id = ?", 1, 3).Find(&users)
model.DB.Where("id = ? or id = ?", 1, 3).Or("id = ?", 5).Find(&users)
c.JSON(http.StatusOK, users)
}
其他字段置空,可自定义结构体(注意指定表名)
func (student StudentController) Select(c *gin.Context) {
var users []model.Student
// 全量查询
model.DB.Select("id,name").Find(&users)
c.JSON(http.StatusOK, users)
}
func (student StudentController) Select(c *gin.Context) {
var users []model.Student
// 全量查询
model.DB.Order("id desc").Find(&users)
c.JSON(http.StatusOK, users)
}
func (student StudentController) Select(c *gin.Context) {
var users []model.Student
// 全量查询
model.DB.Order("id desc").Offset(3).Limit(2).Find(&users)
c.JSON(http.StatusOK, users)
}
func (student StudentController) Select(c *gin.Context) {
var users []model.Student
// 全量查询
var count int64
model.DB.Find(&users).Count(&count)
fmt.Println(count)
c.JSON(http.StatusOK, users)
}
func (student StudentController) Exec(c *gin.Context) {
model.DB.Exec("INSERT INTO student (sn, name, email, class_id, monitor_id) VALUES ('10020', 'ceshi', '[email protected]', 1, 2)")
c.JSON(http.StatusOK, gin.H{
"status": "success",
})
}
func (student StudentController) Exec(c *gin.Context) {
model.DB.Exec("update student set name=? where sn=?", "gorm", 10019)
c.JSON(http.StatusOK, gin.H{
"status": "success",
})
}
func (student StudentController) Exec(c *gin.Context) {
model.DB.Exec("delete from student where sn=?", 10019)
c.JSON(http.StatusOK, gin.H{
"status": "success",
})
}
func (student StudentController) Exec(c *gin.Context) {
var users []model.Student
model.DB.Raw("select * from student").Scan(&users)
c.JSON(http.StatusOK, gin.H{
"status": "success",
"data": users,
})
}