package main
import (
"fmt"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
// 定义模型
type User struct {
ID uint
Name string
Addr string
Age int
}
func main() {
// 连接数据库
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("无法连接到数据库")
}
// 自动迁移模型
// db.AutoMigrate(&User{})
// 查询条件
var conditions []func(db *gorm.DB) *gorm.DB
conditions = append(conditions, WithName("John"))
conditions = append(conditions, WithAge(25))
conditions = append(conditions, WithAddr("%shanghai%"))
// 分页
pageSize := 10
page := 1
// 构建查询
query := db.Model(&User{})
for _, condition := range conditions {
query = condition(query)
}
// 获取记录总数
var totalCount int64
query.Count(&totalCount)
// 分页查询
var users []User
err = query.Limit(pageSize).Offset((page - 1) * pageSize).Find(&users).Error
if err != nil {
panic("查询失败")
}
// 处理查询结果
for _, user := range users {
fmt.Printf("ID: %d, Name: %s, Age: %d\n", user.ID, user.Name, user.Age)
}
// 打印记录总数
fmt.Printf("总记录数: %d\n", totalCount)
}
// WithName 构建根据 Name 查询的条件
func WithName(name string) func(db *gorm.DB) *gorm.DB {
return func(db *gorm.DB) *gorm.DB {
return db.Where("name = ?", name)
}
}
// WithAge 构建根据 Age 查询的条件
func WithAge(age int) func(db *gorm.DB) *gorm.DB {
return func(db *gorm.DB) *gorm.DB {
return db.Where("age = ?", age)
}
}
// WithAddr 构建根据 Addr 查询的条件
func WithAddr(addr string) func(db *gorm.DB) *gorm.DB {
return func(db *gorm.DB) *gorm.DB {
return db.Where("addr like ?", addr)
}
}