Gorm之查询进阶版
# GORM的增删改查
有一个nav表如下:

初始化表:
//Gorm mysql初始化详见《Gorm初始化》
//model.go
type Nav struct {
Id int
Title string
Url string
Status int
Sort int
}
func (Nav) TableName() string {
return "nav"
}
//controller.go
// 控制器继承
type NavController struct {
user.BaseController
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 1、Where
- where 条件可以写的:
- =、<、>、<=、>=、!=
- IS NOT NULL、IS NULL、BETWEEN AND 、NOT BETWEEN AND、IN、OR、AND、NOT、LIKE
func (con NavController) List(c *gin.Context) {
navList := []models.Nav{}
//1、查询ID大于3的数据
//models.DB.Where("id>?", 3).Find(&navList)
//2、查询ID大于3且小于9的数据
//models.DB.Where("id>? and id<?", 3, 9).Find(&navList)
//models.DB.Where("id BETWEEN ? AND ?", 3, 9).Find(&navList)
//3、查询ID在3,5,6中的数据
//models.DB.Where("id in (?)", []int{3, 5, 6}).Find(&navList) //这个比较特殊,使用了切片传入
//4、查询title中带“会“的数据
//models.DB.Where("title like ?", "%会%").Find(&navList)
//5、查询ID等于2或等于3的数据
models.DB.Where("id = ? or id = ?", 2, 3).Find(&navList)
c.JSON(http.StatusOK, gin.H{
"result": navList,
})
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 2、返回指定字段列表
func (con NavController) Column(c *gin.Context) {
//查询数据返回指定字段[返回全部字段但是没有select的字段为空或者为0]
navList := []models.Nav{}
models.DB.Select("id,title").Find(&navList)
c.JSON(http.StatusOK, gin.H{
"result": navList,
})
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
这种输出时如果没有在select中指定到的字段会显示null,如果只想输出指定的字段根据以下操作
//controller.go
type NavDesignated struct {
Id int
Title string
} //重新定义一个struct,只显示指定字段
func (NavDesignated) TableName() string {
return "nav"
} //当然也要重新对table命名
func (con NavController) DesignatedColumn(c *gin.Context) {
//查询数据返回指定字段[返回部分字段]
navList := []NavDesignated{}
models.DB.Select("id,title").Find(&navList)
c.JSON(http.StatusOK, gin.H{
"result": navList,
})
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 3、升/降序
func (con NavController) Order(c *gin.Context) {
//升序降序排列(可多个Order)
navList := []models.Nav{}
models.DB.Order("Id desc").Order("Sort asc").Find(&navList)
c.JSON(http.StatusOK, gin.H{
"result": navList,
})
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 4、分页
func (con NavController) Limit(c *gin.Context) {
//限制列数
navList := []models.Nav{}
models.DB.Order("Id desc").Offset(2).Limit(2).Find(&navList)
c.JSON(http.StatusOK, gin.H{
"result": navList,
})
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 5、统计总数
func (con NavController) Count(c *gin.Context) {
//统计总数
var count int64
navList := []models.Nav{}
models.DB.Find(&navList).Count(&count)
c.JSON(http.StatusOK, gin.H{
"result": count,
})
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
编辑 (opens new window)