// Package mysql ... // // Author : go_developer@163.com<白茶清欢> // // Date : 8:04 下午 2021/8/8 package mysql import ( "gorm.io/gorm" ) type BaseDao struct { } // Create 创建新的数据 // // Author : go_developer@163.com<白茶清欢> // // Date : 8:06 下午 2021/8/8 func (b *BaseDao) Create(dbInstance *gorm.DB, table string, data interface{}) error { return dbInstance.Table(table).Create(data).Error } // Update 更新数据 // // Author : go_developer@163.com<白茶清欢> // // Date : 8:12 下午 2021/8/8 func (b *BaseDao) Update(dbInstance *gorm.DB, table string, updateDate interface{}, optionFuncList ...SetOption) error { b.setTxCondition(dbInstance, table, optionFuncList...) return dbInstance.Updates(updateDate).Error } // List 查询数据列表 // // Author : go_developer@163.com<白茶清欢> // // Date : 8:14 下午 2021/8/8 func (b *BaseDao) List(dbInstance *gorm.DB, table string, result interface{}, optionFuncList ...SetOption) error { b.setTxCondition(dbInstance, table, optionFuncList...) return dbInstance.Find(result).Error } // Detail 查询详情 // // Author : go_developer@163.com<白茶清欢> // // Date : 8:25 下午 2021/8/8 func (b *BaseDao) Detail(dbInstance *gorm.DB, table string, result interface{}, optionFuncList ...SetOption) error { b.setTxCondition(dbInstance, table, optionFuncList...) return dbInstance.First(result).Error } // Count 查询数量 // // Author : go_developer@163.com<白茶清欢> // // Date : 8:25 下午 2021/8/8 func (b *BaseDao) Count(dbInstance *gorm.DB, table string, optionFuncList ...SetOption) (int64, error) { b.setTxCondition(dbInstance, table, optionFuncList...) var cnt int64 return cnt, dbInstance.Count(&cnt).Error } // Begin 开启事务 // // Author : go_developer@163.com<白茶清欢> // // Date : 3:09 下午 2021/8/9 func (b *BaseDao) Begin(dbInstance *gorm.DB) *gorm.DB { return dbInstance.Begin() } // Commit 提交事务 // // Author : go_developer@163.com<白茶清欢> // // Date : 3:10 下午 2021/8/9 func (b *BaseDao) Commit(db *gorm.DB) error { return db.Commit().Error } // Rollback 回滚 // // Author : go_developer@163.com<白茶清欢> // // Date : 3:12 下午 2021/8/9 func (b *BaseDao) Rollback(db *gorm.DB) error { return db.Rollback().Error } // setTxCondition 设置查询条件 // // Author : go_developer@163.com<白茶清欢> // // Date : 17:38 2022/5/15 func (b *BaseDao) setTxCondition(tx *gorm.DB, table string, optionFuncList ...SetOption) { // 指定查询的表 tx.Table(table) // 构建查询条件 o := &Option{} for _, fn := range optionFuncList { fn(o) } // 设置where条件 if nil != o.Where { tx.Where(o.Where) } // 设置 limit offset if o.Limit > 0 { tx.Limit(o.Limit) } if o.Offset >= 0 { tx.Offset(o.Offset) } // in 语句 if nil != o.In { tx.Where(o.In) } // not in 语句 if nil != o.NotIn { for field, value := range o.NotIn { tx.Where(field+" NOT IN ? ", value) } } // like 语句 if nil != o.Like { for field, value := range o.NotIn { tx.Where(field+" LIKE ? ", value) } } // NOT LIKE 语句 if nil != o.NotLike { for field, value := range o.NotLike { tx.Where(field+" NOT LIKE ? ", value) } } // >= if nil != o.Start { for field, value := range o.Start { tx.Where(field+" >= ?", value) } } // < if nil != o.End { for field, value := range o.End { tx.Where(field+" < ?", value) } } }