Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

16 Commits

Repository files navigation

GORM CRUD 工具封装文档

概述

本工具封装了 GORM 框架,提供了一套类型安全、链式调用的 CRUD 操作接口。通过泛型支持,实现了更简洁的数据库操作方式,并包含事务管理、错误处理等高级特性。

核心接口

IRepo[T any]

泛型仓库接口,T 表示模型类型

IRepoErrHandle[T any]

错误处理接口

方法分类说明

1. 数据库连接与事务管理

方法参数返回值说明
DB()-*gorm.DB获取底层 GORM 连接
Tx()-IRepo[T]使用现有事务或开启新事务
Begin()-IRepo[T]显式开启新事务
Commit()-IRepo[T]提交事务
Rollback()-IRepo[T]回滚事务
WithDB(*gorm.DB)数据库连接IRepo[T]使用自定义 DB 连接
WithCtx(*context.Context)上下文IRepo[T]设置上下文
Clone()-IRepo[T]克隆当前 Repo 实例

2. 错误处理

方法参数返回值说明
OnErr(func(IRepoErrHandle[T]))错误处理函数IRepo[T]设置自定义错误处理器
Err()-*err.Error获取操作错误

3. 查询操作

方法参数返回值说明
Get()-*T查询单条记录(未找到返回nil)
GetOrInit()-*T查询或初始化对象(未找到返回空结构体)
List()-[]T查询列表数据
Count()-int64统计数量
Page()-*Page分页查询(返回通用分页对象)
PageT()-*PageT[T]泛型分页查询(包含类型化数据)
Scan(dest any)目标对象-扫描结果到指定对象
WithPage(page *Page)分页对象IRepo[T]设置分页参数

4. 写入操作

方法参数返回值说明
Create(*T)模型指针int64新增单条记录(返回影响行数)
CreateBatch([]*T)模型切片int64批量新增记录
Save(*T)模型指针int64保存记录(存在更新,不存在新增)
Update()-int64执行更新(需先调用Set/SetMap)
UpdateFull(*T)模型指针int64完整更新模型
Del()-int64删除记录(需先调用条件方法)
Set(string, any)字段名, 值IRepo[T]设置单个更新字段
SetMap(map[string]any)字段映射IRepo[T]批量设置更新字段
Exec(string, ...any)SQL, 参数int64执行原生SQL命令
Raw(string, ...any)SQL, 参数IRepo[T]设置原生SQL查询

5. 条件构建

方法参数返回值说明
Eq(string, any)字段, 值IRepo[T]等于条件
NEq(string, any)字段, 值IRepo[T]不等于条件
In(string, any)字段, 值IRepo[T]IN 条件
Gt(string, any)字段, 值IRepo[T]大于条件
Gte(string, any)字段, 值IRepo[T]大于等于条件
Lt(string, any)字段, 值IRepo[T]小于条件
Lte(string, any)字段, 值IRepo[T]小于等于条件
Like(string, any)字段, 值IRepo[T]模糊匹配
NotNull(string)字段IRepo[T]非NULL条件
Null(string)字段IRepo[T]NULL条件
Or(string, any)字段, 值IRepo[T]OR条件
Where(string, ...any)条件, 参数IRepo[T]自定义WHERE条件
Select(...string)字段列表IRepo[T]指定查询字段
Omit(...string)字段列表IRepo[T]排除字段
Desc(string)字段IRepo[T]降序排序
Asc(string)字段IRepo[T]升序排序
Limit(int64)数量IRepo[T]限制结果数量

使用示例

基础CRUD操作

// 初始化RepouserRepo:=NewRepo[User]()
// 创建记录newUser:=&User{Name: "John", Age: 30}
userRepo.Create(newUser)
// 查询单条user:=userRepo.Eq("id", 123).Get()
// 更新记录userRepo.Eq("id", 123).Set("age", 31).Update()
// 删除记录userRepo.Eq("id", 456).Del()

事务操作

err:=userRepo.Tx(func (txRepoIRepo[User]) error {
// 转出方扣款ifaffected:=txRepo.Eq("id", 1).Set("balance", gorm.Expr("balance - ?", 100)).Update(); affected==0 {
returnerrors.New("扣款失败")
}
// 接收方加款ifaffected:=txRepo.Eq("id", 2).Set("balance", gorm.Expr("balance + ?", 100)).Update(); affected==0 {
returnerrors.New("加款失败")
}
returnnil
})
iferr!=nil {
// 处理事务错误
}

设计特点

  1. 链式调用:所有方法返回 IRepo[T] 接口,支持链式调用
  2. 类型安全:通过泛型确保模型类型一致性
  3. 错误处理:提供灵活的错误处理机制
  4. 事务支持:简化事务管理流程
  5. 条件构建:提供丰富的条件构建方法

注意:实际使用前需初始化全局数据库连接,并注册模型对应的错误处理器

About

gorm wrap

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages