爱摸鱼的Demon
首页
前端知识
后端技术
工程实践
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

爱摸鱼的Demon

我的地盘,欢迎光临。
首页
前端知识
后端技术
工程实践
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • C#

  • Golang

    • Go

    • Gin

    • GORM

      • Gorm初始化
      • Gorm之增删改查
      • Gorm之查询进阶版
        • 1、Where
        • 2、返回指定字段列表
        • 3、升/降序
        • 4、分页
        • 5、统计总数
      • Gorm之根据外键关联表
      • Gorm之关联进阶版
      • Gorm之事务
  • 后端技术
  • Golang
  • GORM
DemonW-X
2025-11-13
目录

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

# 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、返回指定字段列表

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

这种输出时如果没有在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

# 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

# 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

# 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
编辑 (opens new window)
Gorm之增删改查
Gorm之根据外键关联表

← Gorm之增删改查 Gorm之根据外键关联表→

最近更新
01
Gorm之事务
11-13
02
Gorm之关联进阶版
11-13
03
Gorm之根据外键关联表
11-13
更多文章>
Theme by Vdoing | Copyright © 2022-2025 爱摸鱼的Demon | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式