39
39
import org .apache .ibatis .mapping .ResultMap ;
40
40
import org .apache .ibatis .mapping .ResultMapping ;
41
41
import org .apache .ibatis .mapping .SqlCommandType ;
42
+ import org .apache .ibatis .reflection .DefaultReflectorFactory ;
43
+ import org .apache .ibatis .reflection .MetaObject ;
44
+ import org .apache .ibatis .reflection .ReflectorFactory ;
45
+ import org .apache .ibatis .reflection .factory .DefaultObjectFactory ;
46
+ import org .apache .ibatis .reflection .factory .ObjectFactory ;
47
+ import org .apache .ibatis .reflection .wrapper .DefaultObjectWrapperFactory ;
48
+ import org .apache .ibatis .reflection .wrapper .ObjectWrapperFactory ;
49
+ import org .apache .ibatis .scripting .xmltags .XMLLanguageDriver ;
42
50
import org .apache .ibatis .session .Configuration ;
43
51
import org .apache .ibatis .type .JdbcType ;
44
52
import org .apache .ibatis .type .TypeException ;
@@ -103,16 +111,93 @@ MappedStatement getMappedStatement() {
103
111
}
104
112
105
113
@ Test
106
- void testParameterObjectMetaObjectGetValue () {
114
+ void testParameterObjectGetPropertyValueWithAdditionalParameter () throws SQLException {
107
115
Configuration config = new Configuration ();
108
116
TypeHandlerRegistry registry = config .getTypeHandlerRegistry ();
109
117
110
118
MappedStatement mappedStatement = new MappedStatement .Builder (config , "testSelect" , new StaticSqlSource (config , "some select statement" ), SqlCommandType .SELECT ).build ();
111
119
112
- Author parameterObject = mock (Author .class );
120
+ Object parameterObject = 1 ;
121
+
122
+ BoundSql boundSql = new BoundSql (config , "some select statement" , new ArrayList <ParameterMapping >() {
123
+ {
124
+ add (new ParameterMapping .Builder (config , "id" , registry .getTypeHandler (int .class )).build ());
125
+ }
126
+ }, parameterObject ) {
127
+ {
128
+ setAdditionalParameter ("id" , 2 );
129
+ }
130
+ };
131
+
132
+ DefaultParameterHandler defaultParameterHandler = new DefaultParameterHandler (mappedStatement , parameterObject , boundSql );
133
+
134
+ PreparedStatement ps = mock (PreparedStatement .class );
135
+
136
+ defaultParameterHandler .setParameters (ps );
137
+
138
+ verify (ps , times (1 )).setInt (1 , 2 );
139
+ }
140
+
141
+ @ Test
142
+ void testParameterObjectGetPropertyValueWithNull () throws SQLException {
143
+ Configuration config = new Configuration ();
144
+ TypeHandlerRegistry registry = config .getTypeHandlerRegistry ();
145
+
146
+ MappedStatement mappedStatement = new MappedStatement .Builder (config , "testSelect" , new StaticSqlSource (config , "some select statement" ), SqlCommandType .SELECT ).build ();
147
+
148
+ Object parameterObject = null ;
149
+
150
+ BoundSql boundSql = new BoundSql (config , "some select statement" , new ArrayList <ParameterMapping >() {
151
+ {
152
+ add (new ParameterMapping .Builder (config , "id" , registry .getTypeHandler (int .class )).build ());
153
+ }
154
+ }, parameterObject );
155
+
156
+ DefaultParameterHandler defaultParameterHandler = new DefaultParameterHandler (mappedStatement , parameterObject , boundSql );
157
+
158
+ PreparedStatement ps = mock (PreparedStatement .class );
159
+
160
+ defaultParameterHandler .setParameters (ps );
161
+
162
+ verify (ps , times (1 )).setNull (1 , config .getJdbcTypeForNull ().TYPE_CODE );
163
+ }
164
+
165
+ @ Test
166
+ void testParameterObjectGetPropertyValueWithTypeHandler () throws SQLException {
167
+ Configuration config = new Configuration ();
168
+ TypeHandlerRegistry registry = config .getTypeHandlerRegistry ();
169
+
170
+ MappedStatement mappedStatement = new MappedStatement .Builder (config , "testSelect" , new StaticSqlSource (config , "some select statement" ), SqlCommandType .SELECT ).build ();
171
+
172
+ Object parameterObject = 1 ;
113
173
114
174
BoundSql boundSql = new BoundSql (config , "some select statement" , new ArrayList <ParameterMapping >() {
115
175
{
176
+ add (new ParameterMapping .Builder (config , "id" , registry .getTypeHandler (int .class )).build ());
177
+ }
178
+ }, parameterObject );
179
+
180
+ DefaultParameterHandler defaultParameterHandler = new DefaultParameterHandler (mappedStatement , parameterObject , boundSql );
181
+
182
+ PreparedStatement ps = mock (PreparedStatement .class );
183
+
184
+ defaultParameterHandler .setParameters (ps );
185
+
186
+ verify (ps , times (1 )).setInt (1 , (Integer ) parameterObject );
187
+ }
188
+
189
+ @ Test
190
+ void testParameterObjectGetPropertyValueWithMetaObject () throws SQLException {
191
+ Configuration config = new Configuration ();
192
+ TypeHandlerRegistry registry = config .getTypeHandlerRegistry ();
193
+
194
+ MappedStatement mappedStatement = new MappedStatement .Builder (config , "testSelect" , new StaticSqlSource (config , "some select statement" ), SqlCommandType .SELECT ).build ();
195
+
196
+ Author parameterObject =
new Author (-
1 ,
"cbegin" ,
"******" ,
"[email protected] " ,
"N/A" ,
Section .
NEWS );
197
+
198
+ BoundSql boundSql = new BoundSql (config , "some select statement" , new ArrayList <ParameterMapping >() {
199
+ {
200
+ add (new ParameterMapping .Builder (config , "id" , registry .getTypeHandler (int .class )).build ());
116
201
add (new ParameterMapping .Builder (config , "username" , registry .getTypeHandler (String .class )).build ());
117
202
add (new ParameterMapping .Builder (config , "password" , registry .getTypeHandler (String .class )).build ());
118
203
add (new ParameterMapping .Builder (config , "email" , registry .getTypeHandler (String .class )).build ());
@@ -127,10 +212,56 @@ void testParameterObjectMetaObjectGetValue() {
127
212
128
213
defaultParameterHandler .setParameters (ps );
129
214
215
+ verify (ps , times (1 )).setInt (1 , parameterObject .getId ());
216
+ verify (ps , times (1 )).setString (2 , parameterObject .getUsername ());
217
+ verify (ps , times (1 )).setString (3 , parameterObject .getPassword ());
218
+ verify (ps , times (1 )).setString (4 , parameterObject .getEmail ());
219
+ verify (ps , times (1 )).setString (5 , parameterObject .getBio ());
220
+ verify (ps , times (1 )).setObject (6 , parameterObject .getFavouriteSection ().name (), JdbcType .VARCHAR .TYPE_CODE );
221
+ }
222
+
223
+ @ Test
224
+ void testParameterObjectGetPropertyValueWithMetaObjectAndCreateOnce () {
225
+ Author parameterObject = mock (Author .class );
226
+
227
+ Configuration mockConfig = mock (Configuration .class );
228
+
229
+ final ObjectFactory objectFactory = new DefaultObjectFactory ();
230
+ final ObjectWrapperFactory objectWrapperFactory = new DefaultObjectWrapperFactory ();
231
+ final ReflectorFactory reflectorFactory = new DefaultReflectorFactory ();
232
+
233
+ when (mockConfig .getTypeHandlerRegistry ()).thenReturn (new TypeHandlerRegistry (mockConfig ));
234
+ when (mockConfig .getDefaultScriptingLanguageInstance ()).thenReturn (new XMLLanguageDriver ());
235
+ when (mockConfig .newMetaObject (parameterObject )).thenReturn (MetaObject .forObject (parameterObject , objectFactory , objectWrapperFactory , reflectorFactory ));
236
+
237
+ TypeHandlerRegistry registry = mockConfig .getTypeHandlerRegistry ();
238
+
239
+ MappedStatement mappedStatement = new MappedStatement .Builder (mockConfig , "testSelect" , new StaticSqlSource (mockConfig , "some select statement" ), SqlCommandType .SELECT ).build ();
240
+
241
+ BoundSql boundSql = new BoundSql (mockConfig , "some select statement" , new ArrayList <ParameterMapping >() {
242
+ {
243
+ add (new ParameterMapping .Builder (mockConfig , "id" , registry .getTypeHandler (int .class )).jdbcType (JdbcType .INTEGER ).build ());
244
+ add (new ParameterMapping .Builder (mockConfig , "username" , registry .getTypeHandler (String .class )).jdbcType (JdbcType .VARCHAR ).build ());
245
+ add (new ParameterMapping .Builder (mockConfig , "password" , registry .getTypeHandler (String .class )).jdbcType (JdbcType .VARCHAR ).build ());
246
+ add (new ParameterMapping .Builder (mockConfig , "email" , registry .getTypeHandler (String .class )).jdbcType (JdbcType .VARCHAR ).build ());
247
+ add (new ParameterMapping .Builder (mockConfig , "bio" , registry .getTypeHandler (String .class )).jdbcType (JdbcType .VARCHAR ).build ());
248
+ add (new ParameterMapping .Builder (mockConfig , "favouriteSection" , registry .getTypeHandler (Section .class )).jdbcType (JdbcType .VARCHAR ).build ());
249
+ }
250
+ }, parameterObject );
251
+
252
+ DefaultParameterHandler defaultParameterHandler = new DefaultParameterHandler (mappedStatement , parameterObject , boundSql );
253
+
254
+ PreparedStatement ps = mock (PreparedStatement .class );
255
+
256
+ defaultParameterHandler .setParameters (ps );
257
+
258
+ verify (parameterObject , times (1 )).getId ();
130
259
verify (parameterObject , times (1 )).getUsername ();
131
260
verify (parameterObject , times (1 )).getPassword ();
132
261
verify (parameterObject , times (1 )).getEmail ();
133
262
verify (parameterObject , times (1 )).getBio ();
134
263
verify (parameterObject , times (1 )).getFavouriteSection ();
264
+
265
+ verify (mockConfig , times (1 )).newMetaObject (parameterObject );
135
266
}
136
267
}
0 commit comments