Skip to content

Commit 0a461f7

Browse files
committed
优化object,修复simpletype判断的[]byte错误
1 parent 834eba2 commit 0a461f7

File tree

5 files changed

+478
-118
lines changed

5 files changed

+478
-118
lines changed

models.go

+52-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ package gobatis
1010

1111
import (
1212
"github.com/xfali/gobatis/errors"
13+
"github.com/xfali/gobatis/logging"
1314
"github.com/xfali/gobatis/reflection"
1415
"reflect"
1516
"sync"
@@ -68,7 +69,7 @@ func RegisterModelWithName(name string, model interface{}) (*ModelInfo, error) {
6869
if err != nil {
6970
return nil, err
7071
}
71-
tableInfo, err := reflection.GetObjectInfo(model)
72+
tableInfo, err := reflection.GetStructInfo(model)
7273
if err != nil {
7374
return nil, errors.PARSE_MODEL_TABLEINFO_FAILED
7475
}
@@ -77,7 +78,7 @@ func RegisterModelWithName(name string, model interface{}) (*ModelInfo, error) {
7778
if name == "" {
7879
name = tableInfo.GetClassName()
7980
}
80-
ret := &ModelInfo{ObjectInfo: nil, Model: model}
81+
ret := &ModelInfo{ObjectInfo: tableInfo, Model: model}
8182
g_model_mgr.modelMap[name] = ret
8283
return ret, nil
8384
}
@@ -119,3 +120,52 @@ func (mi *ModelInfo) Deserialize(columns []string, values []interface{}) (interf
119120

120121
return v.Interface(), nil
121122
}
123+
124+
type ObjectInfo struct {
125+
ObjectInfo reflection.Object
126+
ElemInfo reflection.Object
127+
}
128+
129+
func (o *ObjectInfo) New(bean interface{}) *ObjectInfo {
130+
ret := ObjectInfo{}
131+
obj, err := reflection.GetObjectInfo(bean)
132+
if err != nil {
133+
return nil
134+
}
135+
ret.ObjectInfo = obj
136+
if obj.CanAddValue() {
137+
ev := obj.NewElemValue()
138+
elemObj, err := reflection.GetReflectObjectInfo(ev.Type(), ev)
139+
if err != nil {
140+
return nil
141+
}
142+
if elemObj.CanAddValue() {
143+
logging.Warn("[][]slice type not support!")
144+
return nil
145+
}
146+
ret.ElemInfo = elemObj
147+
}
148+
return &ret
149+
}
150+
151+
func (o *ObjectInfo) Deserialize(columns []string, values []interface{}) (interface{}, error) {
152+
var obj reflection.Object
153+
if o.ElemInfo != nil {
154+
obj = o.ElemInfo.New()
155+
} else {
156+
obj = o.ObjectInfo
157+
}
158+
159+
for i := range columns {
160+
if obj.CanSetField() {
161+
obj.SetField(columns[i], values[i])
162+
} else {
163+
obj.SetValue(reflect.ValueOf(values[0]))
164+
break
165+
}
166+
}
167+
if o.ObjectInfo.CanAddValue() {
168+
o.ObjectInfo.AddValue(obj.GetValue())
169+
}
170+
return obj.GetValue().Interface(), nil
171+
}

0 commit comments

Comments
 (0)