package global
import (
"errors"
"gorm.io/gorm"
"reflect"
)
type GormPlus struct {
*gorm.DB
}
func NewGorm(db *gorm.DB) *GormPlus {
return &GormPlus{
DB: db,
}
}
func (gi *GormPlus) Create(value interface{}) error {
return gi.DB.Create(value).Error
}
func (gi *GormPlus) Update(value interface{}) error {
return gi.DB.Save(value).Error
}
// Delete 删除一条User{ID: 1};删除多条:User{Name: "John"}
func (gi *GormPlus) Delete(value interface{}) error {
return gi.DB.Delete(value).Error
}
func (gi *GormPlus) QueryOne(dbName string, conditions string, result interface{}) error {
// 确保传入的result是一个指针类型
if reflect.ValueOf(result).Kind() != reflect.Pointer {
return errors.New("result must be a pointer")
}
// 根据表名获取对应的模型结构体
model := reflect.New(reflect.TypeOf(result).Elem()).Interface()
// 设置查询操作的模型
query := gi.DB.Table(dbName).Set("gorm:model", model)
// 应用查询条件
if conditions != "" {
query = query.Where(conditions)
}
// 根据传入的结构体名获取对应的表数据
if err := query.Find(result).Error; err != nil {
return err
}
return nil
}
func (gi *GormPlus) QueryList(dbName string, conditions string, result interface{}) error {
// 确保传入的result是一个指针类型
if reflect.ValueOf(result).Kind() != reflect.Pointer {
return errors.New("result must be a pointer")
}
// 根据表名获取对应的模型结构体
model := reflect.New(reflect.TypeOf(result).Elem()).Interface()
// 设置查询操作的模型
query := gi.DB.Table(dbName).Set("gorm:model", model)
// 应用查询条件
if conditions != "" {
query = query.Where(conditions)
}
// 根据传入的结构体名获取对应的表数据
if err := query.Order("create_time desc").Find(result).Error; err != nil {
return err
}
return nil
}
func (gi *GormPlus) QueryListPage(dbName string, conditions string, pageSize, pageNum int, result interface{}) (int64, error) {
// 确保传入的result是一个指针类型
if reflect.ValueOf(result).Kind() != reflect.Pointer {
return 0, errors.New("result must be a pointer")
}
// 根据表名获取对应的模型结构体
model := reflect.New(reflect.TypeOf(result).Elem()).Interface()
// 设置查询操作的模型
query := gi.DB.Table(dbName).Set("gorm:model", model)
// 应用查询条件
if conditions != "" {
query = query.Where(conditions)
}
//计算列表数量
var count int64
query.Count(&count)
// 根据传入的结构体名获取对应的表数据
if err := query.Order("create_time desc").Limit(pageSize).Offset((pageNum - 1) * pageSize).Find(result).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
// 记录不存在的逻辑处理
return 0, errors.New("ErrRecordNotFound")
}
return 0, err
}
return count, nil
}
封装了GORM通用的工具包--填删改查加分页
最新推荐文章于 2025-05-23 21:41:40 发布