@@ -197,11 +197,17 @@ func SelectListMaps[T any](q *Query[T], opts ...OptionFunc) ([]map[string]any, *
197
197
198
198
// SelectPage 根据条件分页查询记录
199
199
func SelectPage [T any ](page * Page [T ], q * Query [T ], opts ... OptionFunc ) (* Page [T ], * gorm.DB ) {
200
- total , countDb := SelectCount [T ](q , opts ... )
201
- if countDb .Error != nil {
202
- return page , countDb
200
+ option := getOption (opts )
201
+
202
+ // 如果需要分页忽略总数,不查询总数
203
+ if ! option .IgnoreTotal {
204
+ total , countDb := SelectCount [T ](q , opts ... )
205
+ if countDb .Error != nil {
206
+ return page , countDb
207
+ }
208
+ page .Total = total
203
209
}
204
- page . Total = total
210
+
205
211
resultDb := buildCondition (q , opts ... )
206
212
var results []* T
207
213
resultDb .Scopes (paginate (page )).Find (& results )
@@ -213,11 +219,15 @@ func SelectPage[T any](page *Page[T], q *Query[T], opts ...OptionFunc) (*Page[T]
213
219
// 第一个泛型代表数据库表实体
214
220
// 第二个泛型代表返回记录实体
215
221
func SelectPageModel [T any , R any ](page * Page [R ], q * Query [T ], opts ... OptionFunc ) (* Page [R ], * gorm.DB ) {
216
- total , countDb := SelectCount [T ](q , opts ... )
217
- if countDb .Error != nil {
218
- return page , countDb
222
+ option := getOption (opts )
223
+ // 如果需要分页忽略总数,不查询总数
224
+ if ! option .IgnoreTotal {
225
+ total , countDb := SelectCount [T ](q , opts ... )
226
+ if countDb .Error != nil {
227
+ return page , countDb
228
+ }
229
+ page .Total = total
219
230
}
220
- page .Total = total
221
231
resultDb := buildCondition (q , opts ... )
222
232
var results []* R
223
233
resultDb .Scopes (paginate (page )).Scan (& results )
@@ -227,11 +237,15 @@ func SelectPageModel[T any, R any](page *Page[R], q *Query[T], opts ...OptionFun
227
237
228
238
// SelectPageMaps 根据条件分页查询,返回分页Map记录
229
239
func SelectPageMaps [T any ](page * Page [map [string ]any ], q * Query [T ], opts ... OptionFunc ) (* Page [map [string ]any ], * gorm.DB ) {
230
- total , countDb := SelectCount [T ](q , opts ... )
231
- if countDb .Error != nil {
232
- return page , countDb
240
+ option := getOption (opts )
241
+ // 如果需要分页忽略总数,不查询总数
242
+ if ! option .IgnoreTotal {
243
+ total , countDb := SelectCount [T ](q , opts ... )
244
+ if countDb .Error != nil {
245
+ return page , countDb
246
+ }
247
+ page .Total = total
233
248
}
234
- page .Total = total
235
249
resultDb := buildCondition (q , opts ... )
236
250
var results []map [string ]any
237
251
resultDb .Scopes (paginate (page )).Find (& results )
@@ -249,6 +263,11 @@ func SelectCount[T any](q *Query[T], opts ...OptionFunc) (int64, *gorm.DB) {
249
263
return count , resultDb
250
264
}
251
265
266
+ func Begin (opts ... * sql.TxOptions ) * gorm.DB {
267
+ db := getDb ()
268
+ return db .Begin (opts ... )
269
+ }
270
+
252
271
func paginate [T any ](p * Page [T ]) func (db * gorm.DB ) * gorm.DB {
253
272
page := p .Current
254
273
pageSize := p .Size
@@ -341,50 +360,49 @@ func getPkColumnName[T any]() string {
341
360
}
342
361
343
362
func getDb (opts ... OptionFunc ) * gorm.DB {
344
- var config Option
345
- for _ , op := range opts {
346
- op (& config )
347
- }
348
-
363
+ option := getOption (opts )
349
364
// Clauses()目的是为了初始化Db,如果db已经被初始化了,会直接返回db
350
365
var db = globalDb .Clauses ()
351
366
352
- if config .Db != nil {
353
- db = config .Db .Clauses ()
367
+ if option .Db != nil {
368
+ db = option .Db .Clauses ()
354
369
}
355
370
356
371
// 设置需要忽略的字段
357
- setOmitIfNeed (config , db )
372
+ setOmitIfNeed (option , db )
358
373
359
374
// 设置选择的字段
360
- setSelectIfNeed (config , db )
375
+ setSelectIfNeed (option , db )
361
376
362
377
return db
363
378
}
364
379
365
- func setSelectIfNeed (config Option , db * gorm.DB ) {
366
- if len (config .Selects ) > 0 {
380
+ func setSelectIfNeed (option Option , db * gorm.DB ) {
381
+ if len (option .Selects ) > 0 {
367
382
var columnNames []string
368
- for _ , column := range config .Selects {
383
+ for _ , column := range option .Selects {
369
384
columnName := getColumnName (column )
370
385
columnNames = append (columnNames , columnName )
371
386
}
372
387
db .Select (columnNames )
373
388
}
374
389
}
375
390
376
- func setOmitIfNeed (config Option , db * gorm.DB ) {
377
- if len (config .Omits ) > 0 {
391
+ func setOmitIfNeed (option Option , db * gorm.DB ) {
392
+ if len (option .Omits ) > 0 {
378
393
var columnNames []string
379
- for _ , column := range config .Omits {
394
+ for _ , column := range option .Omits {
380
395
columnName := getColumnName (column )
381
396
columnNames = append (columnNames , columnName )
382
397
}
383
398
db .Omit (columnNames ... )
384
399
}
385
400
}
386
401
387
- func Begin (opts ... * sql.TxOptions ) * gorm.DB {
388
- db := getDb ()
389
- return db .Begin (opts ... )
402
+ func getOption (opts []OptionFunc ) Option {
403
+ var config Option
404
+ for _ , op := range opts {
405
+ op (& config )
406
+ }
407
+ return config
390
408
}
0 commit comments