method.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package database
  2. import (
  3. "git.getensh.com/common/gopkgsv2/logger"
  4. "go.uber.org/zap"
  5. "gorm.io/gorm"
  6. )
  7. // 查询选项
  8. type Option struct {
  9. TableName string
  10. Fields string
  11. Joins []string
  12. Limit int
  13. OffSet int
  14. OrderBy string
  15. Group string
  16. Having string
  17. }
  18. // 处理参数信息
  19. func parseOptions(db *gorm.DB, opts ...Option) *gorm.DB {
  20. for _, opt := range opts {
  21. if opt.TableName != "" {
  22. db = db.Table(opt.TableName)
  23. }
  24. if opt.Fields != "" {
  25. db = db.Select(opt.Fields)
  26. }
  27. if len(opt.Joins) != 0 {
  28. for i := range opt.Joins {
  29. db = db.Joins(opt.Joins[i])
  30. }
  31. }
  32. if opt.Limit > 0 {
  33. db = db.Limit(opt.Limit)
  34. }
  35. if opt.OffSet > 0 {
  36. db = db.Offset(opt.OffSet)
  37. }
  38. if opt.OrderBy != "" {
  39. db = db.Order(opt.OrderBy)
  40. }
  41. if opt.Group != "" {
  42. db = db.Group(opt.Group)
  43. }
  44. if opt.Having != "" {
  45. db = db.Having(opt.Having)
  46. }
  47. }
  48. return db
  49. }
  50. // 通用Create方法
  51. func Create(db *gorm.DB, val interface{}, opts ...Option) error {
  52. db = parseOptions(db, opts...)
  53. err := db.Create(val).Error
  54. if err != nil {
  55. logger.Error("mysql",
  56. zap.String("sql", db.Dialector.Explain(db.Statement.SQL.String(), db.Statement.Vars...)),
  57. zap.String("error", err.Error()))
  58. }
  59. return err
  60. }
  61. // 通用的查找单条记录方法
  62. // 在外部构建where条件
  63. func Get(db *gorm.DB, info interface{}, opts ...Option) error {
  64. db = parseOptions(db, opts...)
  65. return db.Take(info).Error
  66. }
  67. // 通用的列表方法
  68. // 在外部构建where条件
  69. func List(db *gorm.DB, list interface{}, opts ...Option) error {
  70. db = parseOptions(db, opts...)
  71. return db.Find(list).Error
  72. }
  73. // 通用的更新方法
  74. // 在外部构建where条件
  75. func Update(db *gorm.DB, values interface{}, opts ...Option) error {
  76. db = parseOptions(db, opts...)
  77. return db.Updates(values).Error
  78. }
  79. // 通用的统计方法
  80. // 在外部构建条件
  81. func Count(db *gorm.DB, opts ...Option) (count int64, err error) {
  82. db = parseOptions(db, opts...)
  83. err = db.Count(&count).Error
  84. return count, err
  85. }
  86. // 执行sql
  87. func Exec(db *gorm.DB, sql string, values []interface{}) error {
  88. return db.Exec(sql, values...).Error
  89. }