gorm-查询记录

文章展示了如何使用GORM库在Go语言中连接到MySQL数据库,创建表,以及执行各种查询操作,包括按ID选择记录,条件查询,LIKE,IN,AND操作符,时间条件和使用结构体及Map作为查询条件。

gorm-查询记录


首先先连接Mysql

package main

import (
	"fmt"
	"time"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

var db *gorm.DB

func init() {
	dsn := "root:123456@tcp(127.0.0.1:3306)/golang_test?charset=utf8mb4&parseTime=True&loc=Local"
	d, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}
	db = d
}

type User struct {
	gorm.Model
	Name     string
	Age      int
	Birthday time.Time
}

func CreateTables() {
	db.AutoMigrate(&User{})
}

进行简单的查询

func select2() {
	// select * from users where id = 3
	db.First(&user, 3)
	fmt.Printf("user.ID: %v\n", user.Name)

	// select * from users where id = 3
	db.First(&user, "3")
	fmt.Printf("user.ID: %v\n", user.Name)

	var users []User
	db.Find(&users, []int{1, 2, 3})
	for _, user := range users {
		fmt.Printf("user.ID: %v\n", user.Name)
	}
}

RowsAffected查询记录条数

var users []User

func select3() {

	result := db.Find(&users)
	fmt.Printf("result.RowsAffected: %v\n", result.RowsAffected)
}

条件查询

func select4() {
	// 条件查询
	// 获取第一条匹配的记录
	db.Where("name=?", "krien").First(&user)
	fmt.Printf("user.ID: %v\n", user.ID)
	// select * from users where name = "krien" order by id limit 1;

	// 获取全部匹配的记录
	db.Where("name <> ?", "tom").Find(&users)
	// select * from users where name <> "tom";

	//IN
	db.Where("name IN ?", []string{"krien", "kiki"}).Find(&users)
	// select * from users where name in ("krien","kiki");

	// LIKE
	db.Where("name LIKE ?", "%k%").Find(&users)
	// select * from users where name like '%k%';

	// AND
	db.Where("name = ? AND age >= ?", "krien", "18").Find(&users)
	// select * from users where name = "krien" and age = 18;

	// Time
	db.Where("updated_at > ?", "2020-01-01").Find(&users)
	// select * from users where updated_at > '2020-01-01';
}

Struck&Map 条件

当结构体作为条件查询时,gorm只会查询非零值字段/这意味着如果你的字段值为“0”,false或其他零值,该字段不会用于构建查询条件

如果想要包含零值查询,可以用Map

func select5() {
	//Struct
	db.Where(&User{Name: "krien", Age: 20}).First(&user)
	// select * from users where name = "krien" and age = 20 order by id limit 1

	// Map
	db.Where(map[string]interface{}{"name": "krien", "age": 20}).Find(&users)
	// select * from users where name = "krien" and age = 20

	// 主键切片条件
	db.Where([]int64{20, 21, 22}).Find(&users)

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值