123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- package database
- import (
- "git.getensh.com/common/gopkgsv2/logger"
- "go.uber.org/zap"
- "gorm.io/gorm"
- )
- // 查询选项
- type Option struct {
- TableName string
- Fields string
- Joins []string
- Limit int
- OffSet int
- OrderBy string
- Group string
- Having string
- }
- // 处理参数信息
- func parseOptions(db *gorm.DB, opts ...Option) *gorm.DB {
- for _, opt := range opts {
- if opt.TableName != "" {
- db = db.Table(opt.TableName)
- }
- if opt.Fields != "" {
- db = db.Select(opt.Fields)
- }
- if len(opt.Joins) != 0 {
- for i := range opt.Joins {
- db = db.Joins(opt.Joins[i])
- }
- }
- if opt.Limit > 0 {
- db = db.Limit(opt.Limit)
- }
- if opt.OffSet > 0 {
- db = db.Offset(opt.OffSet)
- }
- if opt.OrderBy != "" {
- db = db.Order(opt.OrderBy)
- }
- if opt.Group != "" {
- db = db.Group(opt.Group)
- }
- if opt.Having != "" {
- db = db.Having(opt.Having)
- }
- }
- return db
- }
- // 通用Create方法
- func Create(db *gorm.DB, val interface{}, opts ...Option) error {
- db = parseOptions(db, opts...)
- err := db.Create(val).Error
- if err != nil {
- logger.Error("mysql",
- zap.String("sql", db.Dialector.Explain(db.Statement.SQL.String(), db.Statement.Vars...)),
- zap.String("error", err.Error()))
- }
- return err
- }
- // 通用的查找单条记录方法
- // 在外部构建where条件
- func Get(db *gorm.DB, info interface{}, opts ...Option) error {
- db = parseOptions(db, opts...)
- return db.Take(info).Error
- }
- // 通用的列表方法
- // 在外部构建where条件
- func List(db *gorm.DB, list interface{}, opts ...Option) error {
- db = parseOptions(db, opts...)
- return db.Find(list).Error
- }
- // 通用的更新方法
- // 在外部构建where条件
- func Update(db *gorm.DB, values interface{}, opts ...Option) error {
- db = parseOptions(db, opts...)
- return db.Updates(values).Error
- }
- // 通用的统计方法
- // 在外部构建条件
- func Count(db *gorm.DB, opts ...Option) (count int64, err error) {
- db = parseOptions(db, opts...)
- err = db.Count(&count).Error
- return count, err
- }
- // 执行sql
- func Exec(db *gorm.DB, sql string, values []interface{}) error {
- return db.Exec(sql, values...).Error
- }
|