Gin之GORM 查询语句

前期工作可以看之前的(连接数据库;以及确定要操作的库)

Gin之GORM 操作数据库(MySQL)-CSDN博客icon-default.png?t=N7T8https://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.icon-default.png?t=N7T8https://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.icon-default.png?t=N7T8https://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,
}

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵唯一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值