mirror of
https://github.com/tangpanqing/aorm.git
synced 2025-10-18 21:54:36 +08:00
64 lines
1.5 KiB
Go
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])
|
|
}
|
|
}
|