Help us shape the future of Go! Take the 2026 Go Developer Survey

gormx

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 3, 2026 License: Apache-2.0 Imports: 4 Imported by: 0

Documentation

Overview

Package gormx 为 Repository 提供统一的主、从库会话依赖 Sessions 和通用查询辅助方法。

应用传入已有的会话获取函数;以下示例需导入标准库 context、 github.com/bpcoder16/pixiu/infra/gormx 和 gorm.io/gorm:

func countUsers(ctx context.Context, masterDB, slaveDB func(context.Context) *gorm.DB) (int64, error) {
    sessions := gormx.NewSessions(masterDB, slaveDB)
    var count int64
    err := sessions.SlaveDB(ctx).Table("users").Count(&count).Error
    return count, err
}

Sessions 通常在组装 Repository 时创建并长期共用,构造不调用获取函数或连接数据库。 获取函数必须非 nil、并发安全,每次返回绑定当前 Context、没有历史查询条件的可用会话。 NewSessions 对 nil 获取函数 panic,MasterDB/SlaveDB 对 nil Context panic;零值 Sessions 不可用。 每次操作都会调用对应获取函数,不缓存请求 Context 或 GORM 查询会话。 单库可给两个参数传入相同函数;从库选择及回退由具体客户端负责。 写入和对一致性敏感的读取使用 MasterDB,可接受复制延迟的读取使用 SlaveDB。 默认逻辑库由业务项目决定;本包不提供全局默认值、连接池生命周期、CRUD 或隐式事务传播。

按原文包含匹配

WhereLikeContains(tx, queryKey, keyword) 为已有 GORM 查询追加 LIKE 包含条件,不执行查询。 queryKey 必须是代码指定的数据库列名,通过标识符引用,不能传入 SQL 表达式。 keyword 使用参数绑定,内部将 !、%、_ 转义后添加两侧的 %,并显式使用 ESCAPE '!'。 空关键词原样返回 tx;非空关键词不清理空白,原有查询条件及 Context 继续保留。 以下示例中的 db 为已有 GORM 会话,records 为调用方的查询结果切片:

query := db.Table("records").Where("owner_id = ?", ownerID)
err := gormx.WhereLikeContains(query, "title", "100%_").Find(&records).Error

该查询匹配标题中包含字面文本 100%_ 的记录,% 和 _ 不作为调用方提供的通配符。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func WhereLikeContains

func WhereLikeContains(tx *gorm.DB, queryKey, keyword string) *gorm.DB

WhereLikeContains 为指定列添加按关键词原文包含匹配的条件,关键词为空时保留原查询。 queryKey 为代码指定的数据库列名,通过标识符引用,不能传入 SQL 表达式。

Types

type Sessions

type Sessions struct {
	// contains filtered or unexported fields
}

Sessions 保存主、从库会话获取函数,不持有请求会话或管理连接池。 必须通过 NewSessions 构造;获取函数支持并发时,Sessions 可供多个 Repository 共用。

func NewSessions

func NewSessions(masterDB, slaveDB func(context.Context) *gorm.DB) *Sessions

NewSessions 只保存依赖,不访问数据库;任一获取函数为 nil 时 panic。 获取函数须并发安全,每次返回绑定当前 Context、没有历史查询条件的可用会话。

func (*Sessions) MasterDB

func (s *Sessions) MasterDB(ctx context.Context) *gorm.DB

MasterDB 获取本次操作的主库会话;ctx 为 nil 时 panic。

func (*Sessions) SlaveDB

func (s *Sessions) SlaveDB(ctx context.Context) *gorm.DB

SlaveDB 获取本次操作的从库会话;ctx 为 nil 时 panic。 从库选择和未配置从库时的回退由调用方提供的获取函数负责。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL