@@ -10,6 +10,7 @@ package gobatis
10
10
11
11
import (
12
12
"github.com/xfali/gobatis/errors"
13
+ "github.com/xfali/gobatis/logging"
13
14
"github.com/xfali/gobatis/reflection"
14
15
"reflect"
15
16
"sync"
@@ -68,7 +69,7 @@ func RegisterModelWithName(name string, model interface{}) (*ModelInfo, error) {
68
69
if err != nil {
69
70
return nil , err
70
71
}
71
- tableInfo , err := reflection .GetObjectInfo (model )
72
+ tableInfo , err := reflection .GetStructInfo (model )
72
73
if err != nil {
73
74
return nil , errors .PARSE_MODEL_TABLEINFO_FAILED
74
75
}
@@ -77,7 +78,7 @@ func RegisterModelWithName(name string, model interface{}) (*ModelInfo, error) {
77
78
if name == "" {
78
79
name = tableInfo .GetClassName ()
79
80
}
80
- ret := & ModelInfo {ObjectInfo : nil , Model : model }
81
+ ret := & ModelInfo {ObjectInfo : tableInfo , Model : model }
81
82
g_model_mgr .modelMap [name ] = ret
82
83
return ret , nil
83
84
}
@@ -119,3 +120,52 @@ func (mi *ModelInfo) Deserialize(columns []string, values []interface{}) (interf
119
120
120
121
return v .Interface (), nil
121
122
}
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