代码拉取完成,页面将自动刷新
package PagePlus
import (
"fmt"
"gitee.com/manoshi/go-util/exception"
"gitee.com/manoshi/go-util/page"
"gitee.com/manoshi/go-util/util"
"gorm.io/gorm"
)
func Query[T comparable](params []page.Param, m interface{}, data []T, orderBy string, db *gorm.DB) []T {
tx := db.Session(&gorm.Session{PrepareStmt: true})
dataTx := tx.Model(&m).Order(orderBy)
if params != nil {
for _, p := range params {
if !util.IsEmpty(&p.Column) {
dataTx.Where(p.Column+" "+p.Op+" ?", p.Value)
} else if !util.IsEmpty(&p.Sql) {
if p.Value != nil {
dataTx.Where(p.Sql, p.Value)
} else {
dataTx.Where(p.Sql)
}
}
}
}
resultList := dataTx.Find(&data)
if resultList.Error != nil {
exception.ThrowsErr(resultList.Error)
}
return data
}
func Page[T comparable](params []page.Param, pageNum int, pageSize int, m interface{}, data []T, orderBy string, db *gorm.DB) *page.Data {
var page = page.Data{}
page.PageSize = util.If(pageSize == 0, 10, pageSize)
page.PageNum = util.If(pageNum == 0, 1, pageNum)
tx := db.Session(&gorm.Session{PrepareStmt: true})
countTx := tx.Model(&m).Select("count(1)")
if params != nil {
for _, p := range params {
if !util.IsEmpty(&p.Column) {
countTx.Where(p.Column+" "+p.Op+" ?", p.Value)
} else if !util.IsEmpty(&p.Sql) {
if p.Value != nil {
countTx.Where(p.Sql, p.Value)
} else {
countTx.Where(p.Sql)
}
}
}
}
resultCount := countTx.Scan(&page.Total)
if resultCount.Error != nil {
exception.ThrowsErr(resultCount.Error)
}
if page.Total > 0 {
dataTx := tx.Model(&m).Offset((page.PageNum - 1) * page.PageSize).Limit(page.PageSize).Order(orderBy)
if params != nil {
for _, p := range params {
if !util.IsEmpty(&p.Column) {
dataTx.Where(p.Column+" "+p.Op+" ?", p.Value)
} else if !util.IsEmpty(&p.Sql) {
if p.Value != nil {
dataTx.Where(p.Sql, p.Value)
} else {
dataTx.Where(p.Sql)
}
}
}
}
resultList := dataTx.Find(&data)
if resultList.Error != nil {
exception.ThrowsErr(resultList.Error)
}
page.List = data
}
return &page
}
func PageNoCount[T comparable](params []page.Param, pageNum int, pageSize int, m interface{}, data []T, orderBy string, db *gorm.DB) *page.Data {
var page = page.Data{}
page.PageSize = util.If(pageSize == 0, 10, pageSize)
page.PageNum = util.If(pageNum == 0, 1, pageNum)
tx := db.Session(&gorm.Session{PrepareStmt: true})
dataTx := tx.Model(&m).Offset((page.PageNum - 1) * page.PageSize).Limit(page.PageSize).Order(orderBy)
if params != nil {
for _, p := range params {
if !util.IsEmpty(&p.Column) {
dataTx.Where(p.Column+" "+p.Op+" ?", p.Value)
} else if !util.IsEmpty(&p.Sql) {
if p.Value != nil {
dataTx.Where(p.Sql, p.Value)
} else {
dataTx.Where(p.Sql)
}
}
}
}
resultList := dataTx.Find(&data)
if resultList.Error != nil {
exception.ThrowsErr(resultList.Error)
}
page.List = data
return &page
}
func PageSql[T comparable](db *gorm.DB, data []T, pageNum int, pageSize int, sql string, sqlParams []interface{}) *page.Data {
var page = page.Data{}
page.PageSize = util.If(pageSize == 0, 10, pageSize)
page.PageNum = util.If(pageNum == 0, 1, pageNum)
tx := db.Session(&gorm.Session{PrepareStmt: false})
countTx := tx.Raw(fmt.Sprintf("select count(1) from (%s) _tmp_", sql), sqlParams...)
resultCount := countTx.Scan(&page.Total)
if resultCount.Error != nil {
exception.ThrowsErr(resultCount.Error)
}
if page.Total > 0 {
sql = fmt.Sprintf("%s limit ?,? ", sql)
sqlParams = append(sqlParams, (page.PageNum-1)*page.PageSize)
sqlParams = append(sqlParams, page.PageSize)
dataTx := tx.Raw(sql, sqlParams...)
resultList := dataTx.Scan(&data)
if resultList.Error != nil {
exception.ThrowsErr(resultList.Error)
}
}
page.List = data
return &page
}
func PageSqlNoCount[T comparable](db *gorm.DB, data []T, pageNum int, pageSize int, sql string, sqlParams []interface{}) []T {
tx := db.Session(&gorm.Session{PrepareStmt: false})
sql = fmt.Sprintf("%s limit ?,? ", sql)
sqlParams = append(sqlParams, (pageNum-1)*pageSize)
sqlParams = append(sqlParams, pageSize)
dataTx := tx.Raw(sql, sqlParams...)
resultList := dataTx.Scan(&data)
if resultList.Error != nil {
exception.ThrowsErr(resultList.Error)
}
return data
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。