gitee.com/h79/goutils@v1.22.10/dao/wrapper/page.go (about) 1 package wrapper 2 3 import ( 4 "context" 5 "gitee.com/h79/goutils/common" 6 "gorm.io/gorm" 7 "time" 8 ) 9 10 type Page struct { 11 Base 12 Total int64 13 size int 14 offset int 15 } 16 17 func NewPage(db *gorm.DB, timeout time.Duration) *Page { 18 ctx, cancel := context.WithTimeout(context.Background(), timeout) 19 return &Page{ 20 Base: Base{ 21 DB: db, 22 ctx: ctx, 23 cancel: cancel, 24 }, 25 } 26 } 27 28 func (page *Page) WithSize(size int) *Page { 29 page.size = size 30 return page 31 } 32 33 func (page *Page) WithOffset(offset int) *Page { 34 page.offset = offset 35 return page 36 } 37 38 // FindPage 39 // param results := make([]object, 0) 40 func (page *Page) FindPage(model interface{}, where IQuery, sel ISelect) error { 41 db := page.DB.Model(model) 42 if where != nil && where.Is() { 43 db = db.Where(where.Query(), where.Value()...) 44 } 45 if sel != nil && sel.Is() { 46 db = db.Select(sel.Query(), sel.Value()...) 47 } 48 db.Count(&page.Total) 49 if !common.IsNil(page.order) { 50 db = db.Order(page.order) 51 } 52 if page.size > 0 { 53 db = db.Limit(page.size) 54 db = db.Offset(page.offset) 55 } 56 return db.Find(page.Results).Error 57 }