前期工作可以看之前的(连接数据库;以及确定要操作的库)
Gin之GORM 操作数据库(MySQL)-CSDN博客https://blog.csdn.net/m0_72264240/article/details/134948202?spm=1001.2014.3001.5502这次我们操作gin库下的另外一个表mysqll表
1、创建路由和控制器以及固定操作表
1、控制器操作
mysqlcontroller.go:
package admin
import (
"gindemo04/models"
"net/http"
"github.com/gin-gonic/gin"
)
type MysqlController struct {
// Create a new instance of the BaseController struct
BaseController
}
func (con MysqlController) Index(c *gin.Context) {
}
2、创建路由
package routers
import (
"gindemo04/controllers/admin"
"gindemo04/middle"
"github.com/gin-gonic/gin"
)
func AdminRoutersInit(r *gin.Engine) {
//middlewares.InitMiddleware中间件
adminRouters := r.Group("/admin", middle.InitMiddleware)
{
adminRouters.GET("/mysqll",admin.MysqlController{}.Index)
}
}
3、固定表
package models
type Mysqll struct{ //默认操作的是mysqlls这个表
Id int
Master string
Servant string
RealFeature string
}
func (Mysqll) TableName() string {
return "mysqll"
}
前期操作完成
2、开始进行操作
查询 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.https://gorm.io/zh_CN/docs/query.html
1、查询全部数据
//1、查询全部数据
// This function is used to return the index page of the application
//先搞一个数据库的切片
mysqlList := []models.Mysqll{}
//查询数据库数据
models.DB.Find(&mysqlList)
c.JSON(http.StatusOK, gin.H{
"result": mysqlList,
})
2、查询一条数据方法
方法一:
mysqlList1 := []models.Mysqll{}
models.DB.Where("id = ?", 1).Find(&mysqlList1)
c.JSON(http.StatusOK, gin.H{
"result": mysqlList1,
})
方法二:
mysqlResult := models.Mysqll{Id: 2}
models.DB.Find(&mysqlResult)
c.JSON(http.StatusOK, gin.H{
"result": mysqlResult,
})
3、where 方法详细查询
3.1、查询id大于3的数据
mysqlList3 := []models.Mysqll{}
models.DB.Where("id > ?", 3).Find (&mysqlList3)
c.JSON(http.StatusOK, gin.H{
"id>3的是": mysqlList3,
})
3.2、查询id大于1 小于3的数据
// var a =1
// var b =3
//这样修改需要大于小于的即可(未操作)
mysqlList4 := []models.Mysqll{}
models.DB.Where("id > ? and id < ?", 1, 3).Find(&mysqlList4)
c.JSON(http.StatusOK, gin.H{
"id>1 and id < 3": mysqlList4,
})
3.3、查询为1,3,4的数据
mysqlList5 := []models.Mysqll{}
models.DB.Where("id in (?)", []int{1, 3, 4}).Find(&mysqlList5)
c.JSON(http.StatusOK, gin.H{
"id in (1,3,4)": mysqlList5,
})
3.4、使用like模糊查询servant内包含”r“的数据
mysqlList6 := []models.Mysqll{}
models.DB.Where("servant like ?", "%r%").Find (&mysqlList6)
c.JSON(http.StatusOK, gin.H{
"servant like %r%": mysqlList6,
})
3.5、使用between and 查询id在1,4直接的数据
mysqlList7 := []models.Mysqll{}
models.DB.Where("id between ? and ?", 1, 4).Find(&mysqlList7)
c.JSON(http.StatusOK, gin.H{
"id between 1 and 4": mysqlList7,})
3.6、Or 查询id=2 或者 id=3的数据
方法一:
mysqlList8 := []models.Mysqll{}
models.DB.Where("id = ? or id = ?", 2, 3).Find(&mysqlList8)
c.JSON(http.StatusOK, gin.H{
"id = 2 or id = 3": mysqlList8,
})
方法二:加个4
mysqlList9 := []models.Mysqll{}
models.DB.Where("id =?", 2).Or("id = ?", 3).Or("id = ?", 4).Find(&mysqlList9)
c.JSON(http.StatusOK, gin.H{
"id = 2 or id = 3 or id = 4": mysqlList9,
})
4、使用Select指定返回的字段
mysqlLIst10 := []models.Mysqll{}
models.DB.Select("id,servant").Find(&mysqlLIst10)
c.JSON(http.StatusOK, gin.H{
"id,servant": mysqlLIst10,
})
注意:如果需要只显示这两个,需要从新定义一个结构体,只有这两个字段且需要重新搞tablename指定
5、Order排序 、Limit 、Offset(order可以写多个;desc倒序)
//limit限制取的数据数量
//offset 偏移量,确定跳过的数据量(通常和limit配合使用,完成分页(跨越)操作)
mysqlList11 := []models.Mysqll{}
models.DB.Order("id desc").Limit(2).Offset(1).Find(&mysqlList11)
c.JSON(http.StatusOK, gin.H{
"id desc": mysqlList11,
})
6、count统计总数
mysqlList12 := []models.Mysqll{}
var count int64
models.DB.Find(&mysqlList12).Count(&count)
c.JSON(http.StatusOK, gin.H{
"count": count,
})
6.1、Count判断id大于1的数据量
mysqlList13 := []models.Mysqll{}
var count1 int64
models.DB.Where("id > ?", 1).Find(&mysqlList13).Count(&count1)
c.JSON(http.StatusOK, gin.H{
"id大于1": count1,
})
7、原生 sql进行操作
SQL 构建器 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.https://gorm.io/zh_CN/docs/sql_builder.html
7.1使用原生 sql 删除 user 表中的一条数据
result := models.DB.Exec("delete from user where id = ?", 1)
fmt.Println(result.RowsAffected)
7.2、使用原生 sql 修改 user 表中的一条数据
result2 := models.DB.Exec("update user set username = ? where id = ?", "卫宫切嗣", 2)
fmt.Println(result2.RowsAffected)
7.3、使用原生 sql查询 id=2 的数据
mysqlList14 := []models.Mysqll{}
models.DB.Raw("select * from mysqll where id = ?", 2).Scan(&mysqlList14)
c.JSON(http.StatusOK, gin.H{
"id=2": mysqlList14,
})
7.3、使用原生 查询 msyqll表中所有的数据
mysqlList15 := []models.Mysqll{}
models.DB.Raw("select * from mysqll").Scan(&mysqlList15)
c.JSON(http.StatusOK, gin.H{
"mysqll": mysqlList15,
})
7.4.统计 mysqll 表的数量
var count3 int64
models.DB.Raw("select count(*) from mysqll").Scan(&count3)
c.JSON(http.StatusOK, gin.H{
"count": count3,
}