Files
aorm/cache/cache.go
tangpanqing bc43028389 new test
2023-01-09 17:41:57 +08:00

64 lines
1.5 KiB
Go

package cache
import (
"github.com/tangpanqing/aorm/helper"
"github.com/tangpanqing/aorm/model"
"reflect"
"strings"
)
var TableMap = make(map[uintptr]string)
var FieldMap = make(map[uintptr]model.FieldInfo)
//Store 保存到缓存
func Store(destList ...interface{}) {
for i := 0; i < len(destList); i++ {
dest := destList[i]
valueOf := reflect.ValueOf(dest)
typeof := reflect.TypeOf(dest)
tablePointer := valueOf.Pointer()
SetTableMap(tablePointer, getTableNameByReflect(typeof, valueOf))
for j := 0; j < valueOf.Elem().NumField(); j++ {
addr := valueOf.Elem().Field(j).Addr().Pointer()
name := typeof.Elem().Field(j).Name
SetFieldMap(addr, model.FieldInfo{
TablePointer: tablePointer,
Name: name,
})
}
}
}
func SetTableMap(tablePointer uintptr, name string) {
TableMap[tablePointer] = name
}
func GetTableMap(tablePointer uintptr) string {
return TableMap[tablePointer]
}
func SetFieldMap(fieldPointer uintptr, fieldInfo model.FieldInfo) {
FieldMap[fieldPointer] = fieldInfo
}
func GetFieldMap(fieldPointer uintptr) model.FieldInfo {
return FieldMap[fieldPointer]
}
//反射表名,优先从方法获取,没有方法则从名字获取
func getTableNameByReflect(typeOf reflect.Type, valueOf reflect.Value) string {
method, isSet := typeOf.MethodByName("TableName")
if isSet {
var paramList []reflect.Value
paramList = append(paramList, valueOf)
res := method.Func.Call(paramList)
return res[0].String()
} else {
arr := strings.Split(typeOf.String(), ".")
return helper.UnderLine(arr[len(arr)-1])
}
}