完成基本的创建使用功能
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
package gormx
|
||||
|
||||
import (
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type LimitHandler func(db *gorm.DB) *gorm.DB
|
||||
|
||||
func Finder[T any](model T, db *gorm.DB, objs ...LimitHandler) (int64, []T, error) {
|
||||
for _, obj := range objs {
|
||||
db = obj(db)
|
||||
}
|
||||
var models []T
|
||||
err := db.Model(&model).Find(&models).Error
|
||||
if err != nil {
|
||||
return 0, nil, err
|
||||
}
|
||||
var sum int64
|
||||
err = db.Model(&model).Count(&sum).Error
|
||||
return sum, models, err
|
||||
}
|
||||
|
||||
// FinderPage 分页查找
|
||||
func FinderPage[T any](db *gorm.DB, page, limit int, objs ...LimitHandler) (int64, []T, error) {
|
||||
return pageFinder[T](db, pageHandle(page, limit), objs...)
|
||||
}
|
||||
|
||||
func pageFinder[T any](db *gorm.DB, limit LimitHandler, objs ...LimitHandler) (int64, []T, error) {
|
||||
// 定义表
|
||||
var model T
|
||||
db = db.Model(&model)
|
||||
for _, obj := range objs {
|
||||
db = obj(db)
|
||||
}
|
||||
// 查找全部数量
|
||||
var sum int64
|
||||
if err := db.Model(&model).Count(&sum).Error; err != nil {
|
||||
return 0, nil, err
|
||||
}
|
||||
// 分页查找
|
||||
db = limit(db)
|
||||
var models []T
|
||||
if err := db.Find(&models).Error; err != nil {
|
||||
return 0, nil, err
|
||||
}
|
||||
return sum, models, nil
|
||||
}
|
||||
|
||||
func pageHandle(page, limit int) LimitHandler {
|
||||
return func(db *gorm.DB) *gorm.DB {
|
||||
// 用户输入起始位
|
||||
var beginIndex int
|
||||
if page < 0 {
|
||||
beginIndex = -1
|
||||
} else {
|
||||
beginIndex = (page - 1) * limit
|
||||
}
|
||||
return db.Offset(beginIndex).Limit(limit)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user