Golang Gorm 高级查询之where查询

插入测试数据


Go 复制代码
package main

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type Student struct {
	ID    int64
	Name  string `gorm:"size:6"`
	Age   int
	Email *string
}

func (*Student) TableName() string {
	return "student"
}

func main() {
	dsn := "root:7PXjAkY!&nlR@tcp(192.168.11.128:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
	db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	db.AutoMigrate(&Student{})

	var sList []Student
	count := db.Find(&sList).Delete(&sList).RowsAffected
	fmt.Println("count=", count)
	email1 := "12396836709@qq.com"

	sList = []Student{
		{
			ID:    1,
			Name:  "lucas",
			Age:   30,
			Email: &email1,
		},
		{
			ID:    2,
			Name:  "yanzi",
			Age:   28,
			Email: &email1,
		},
		{
			ID:    3,
			Name:  "lulei",
			Age:   29,
			Email: &email1,
		},
		{
			ID:    4,
			Name:  "jerry",
			Age:   25,
			Email: &email1,
		},
	}
	db.Create(&sList)

}

Where语句里面条件 where + find = select * from table where...........


其实就是sql语句当中的where

Go 复制代码
	var sList []Student
	db.Debug().Where("name = ?", "lucas").Find(&sList)
	fmt.Println(sList)


[0.746ms] [rows:1] SELECT * FROM `student` WHERE name = 'lucas'
[{1 lucas 30 0xc0001c91f0}] 

之前学的这种写法也是可以的

Go 复制代码
	var s Student
	db.Debug().Find(&s, "name = ?", "lucas")
	fmt.Println(s)

[1.552ms] [rows:1] SELECT * FROM `student` WHERE name = 'lucas'              
{1 lucas 30 0xc0001c9300}  

使用结构体查询


如果是零值,那么查询的时候就不会将零值作为查询带上了

Go 复制代码
	s = Student{
		Name: "lucas",
		Age:  30,
	}
	db.Debug().Where(&s).Find(&s)

[1.543ms] [rows:1] SELECT * FROM `student` WHERE `student`.`name` = 'lucas' AND `student`.`age` = 30
相关推荐
Tony Bai1 小时前
Rust 看了流泪,AI 看了沉默:扒开 Go 泛型最让你抓狂的“残疾”类型推断
开发语言·人工智能·后端·golang·rust
ん贤2 小时前
AI 大模型落地系列|Eino 编排进阶篇:一文讲透编排(Chain 与 Graph)
人工智能·golang·编排·eino
GDAL4 小时前
BoltDB vs SQLite:极简高并发、低配置场景下的终极对比
golang·sqlite·boltdb
ruxingli6 小时前
GoLang的并发如何避免死锁
开发语言·后端·golang
暴躁小师兄数据学院6 小时前
【WEB3.0零基础转行笔记】go编程篇-第12讲:go-zero入门实战
开发语言·笔记·golang·web3·区块链
念何架构之路7 小时前
Go语言表达式的求值顺序
开发语言·后端·golang
低调的JVM11 小时前
Golang下kafka可观测数据采集组件Otelsarama详解
golang·kafka·可观测·opentelemetry
golang学习记1 天前
Go 实时批处理:让数据库少挨点打 [特殊字符]
开发语言·数据库·golang
hutengyi1 天前
go测试问题记录
开发语言·后端·golang
KevinCyao1 天前
Go短信营销接口示例代码:Golang高并发调用营销短信接口的实现方案与代码分享
android·前端·网络·golang·前端框架