前期工作可以看之前的(连接数据库;以及确定要操作的库)
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 adminimport ("gindemo04/models""net/http""github.com/gin-gonic/gin"
)type MysqlController struct {// Create a new instance of the BaseController structBaseController
}
func (con MysqlController) Index(c *gin.Context) {}
2、创建路由
package routersimport ("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 modelstype Mysqll struct{ //默认操作的是mysqlls这个表Id intMaster stringServant stringRealFeature 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,
}