封装了GORM通用的工具包--填删改查加分页

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
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值