141 lines
3.5 KiB
Go
141 lines
3.5 KiB
Go
package dao
|
||
|
||
import (
|
||
"reflect"
|
||
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||
"github.com/astaxie/beego/orm"
|
||
)
|
||
|
||
type DaoDB struct {
|
||
db orm.Ormer
|
||
}
|
||
|
||
// func GetRows(db *gorm.DB, inPtr interface{}, sql string, values ...interface{}) (err error) {
|
||
// if db == nil {
|
||
// db = gormdb.GetDB()
|
||
// }
|
||
// topTypeInfo := reflect.TypeOf(inPtr)
|
||
// if topTypeInfo.Kind() != reflect.Ptr {
|
||
// panic("SelectEntities inPtr should be slice ptr (*[]Type)")
|
||
// }
|
||
// typeInfo := topTypeInfo.Elem()
|
||
// if typeInfo.Kind() != reflect.Slice {
|
||
// panic("SelectEntities inPtr should be slice ptr (*[]Type)")
|
||
// }
|
||
// elmType := typeInfo.Elem()
|
||
|
||
// valueInfo := reflect.ValueOf(inPtr)
|
||
// rows, err := db.Raw(sql, values...).Rows()
|
||
// if err == nil {
|
||
// defer rows.Close()
|
||
// for rows.Next() {
|
||
// var value reflect.Value
|
||
// if elmType.Kind() == reflect.Ptr {
|
||
// value = reflect.New(elmType.Elem())
|
||
// } else {
|
||
// value = reflect.New(elmType)
|
||
// }
|
||
// db.ScanRows(rows, value.Interface())
|
||
// if elmType.Kind() != reflect.Ptr {
|
||
// value = value.Elem()
|
||
// }
|
||
// valueInfo.Elem().Set(reflect.Append(valueInfo.Elem(), value))
|
||
// }
|
||
// return nil
|
||
// }
|
||
// return err
|
||
// }
|
||
|
||
// beego orm的对于传代表字段的字串,数据库字段名(完全匹配,区分大小写),结构体字段名(不区分大小写)都可以
|
||
|
||
func GetDB() *DaoDB {
|
||
return &DaoDB{db: orm.NewOrm()}
|
||
}
|
||
|
||
func GetRow(db *DaoDB, inPtr interface{}, sql string, values ...interface{}) (err error) {
|
||
if db == nil {
|
||
db = GetDB()
|
||
}
|
||
return db.db.Raw(sql, values).QueryRow(inPtr)
|
||
}
|
||
|
||
func GetRows(db *DaoDB, inPtr interface{}, sql string, values ...interface{}) (err error) {
|
||
if db == nil {
|
||
db = GetDB()
|
||
}
|
||
_, err = db.db.Raw(sql, values).QueryRows(inPtr)
|
||
return err
|
||
}
|
||
|
||
func GetEntity(db *DaoDB, item interface{}, cols ...string) (err error) {
|
||
if db == nil {
|
||
db = GetDB()
|
||
}
|
||
err = utils.CallFuncLogError(func() error {
|
||
return db.db.Read(item, cols...)
|
||
}, reflect.TypeOf(item).Name())
|
||
return err
|
||
}
|
||
|
||
func UpdateEntity(db *DaoDB, item interface{}, cols ...string) (num int64, err error) {
|
||
if db == nil {
|
||
db = GetDB()
|
||
}
|
||
err = utils.CallFuncLogError(func() error {
|
||
num, err = db.db.Update(item, cols...)
|
||
return err
|
||
}, reflect.TypeOf(item).Name())
|
||
return num, err
|
||
}
|
||
|
||
func UpdateEntityByKV(db *DaoDB, item interface{}, kvs map[string]interface{}, conditions map[string]interface{}) (num int64, err error) {
|
||
if db == nil {
|
||
db = GetDB()
|
||
}
|
||
err = utils.CallFuncLogError(func() error {
|
||
qs := db.db.QueryTable(item)
|
||
if conditions == nil {
|
||
qs = qs.Filter("id", jxutils.GetObjFieldByName(item, "ID"))
|
||
} else {
|
||
for k, v := range conditions {
|
||
qs = qs.Filter(k, v)
|
||
}
|
||
}
|
||
num, err = qs.Update(kvs)
|
||
return err
|
||
}, reflect.TypeOf(item).Name())
|
||
return num, err
|
||
}
|
||
|
||
func CreateEntity(db *DaoDB, item interface{}) (err error) {
|
||
if db == nil {
|
||
db = GetDB()
|
||
}
|
||
err = utils.CallFuncLogError(func() error {
|
||
_, err = db.db.Insert(item) // todo 这里需要将ID赋值么?
|
||
return err
|
||
}, reflect.TypeOf(item).Name())
|
||
return err
|
||
}
|
||
|
||
func DeleteEntity(db *DaoDB, item interface{}, conditions map[string]interface{}) (num int64, err error) {
|
||
if db == nil {
|
||
db = GetDB()
|
||
}
|
||
err = utils.CallFuncLogError(func() error {
|
||
if len(conditions) == 0 {
|
||
num, err = db.db.Delete(item)
|
||
} else {
|
||
qs := db.db.QueryTable(item)
|
||
for k, v := range conditions {
|
||
qs = qs.Filter(k, v)
|
||
}
|
||
num, err = qs.Delete()
|
||
}
|
||
return err
|
||
}, reflect.TypeOf(item).Name())
|
||
return 0, err
|
||
}
|