20
20
import static org .mybatis .dynamic .sql .SqlBuilder .*;
21
21
22
22
import java .util .List ;
23
+ import java .util .Map ;
23
24
import java .util .Optional ;
24
25
25
26
import org .apache .ibatis .mapping .Environment ;
31
32
import org .junit .jupiter .api .BeforeAll ;
32
33
import org .junit .jupiter .api .BeforeEach ;
33
34
import org .junit .jupiter .api .Test ;
35
+ import org .mybatis .dynamic .sql .SqlBuilder ;
34
36
import org .mybatis .dynamic .sql .SqlColumn ;
35
37
import org .mybatis .dynamic .sql .delete .DeleteDSLCompleter ;
38
+ import org .mybatis .dynamic .sql .render .RenderingStrategies ;
36
39
import org .mybatis .dynamic .sql .select .SelectDSLCompleter ;
40
+ import org .mybatis .dynamic .sql .select .render .SelectStatementProvider ;
37
41
import org .testcontainers .junit .jupiter .Container ;
38
42
import org .testcontainers .junit .jupiter .Testcontainers ;
39
43
@@ -42,7 +46,7 @@ public class CustomRenderingTest {
42
46
43
47
@ Container
44
48
private static PgContainer postgres = new PgContainer ("examples/custom_render/dbInit.sql" );
45
-
49
+
46
50
private static SqlSessionFactory sqlSessionFactory ;
47
51
48
52
@ BeforeAll
@@ -149,7 +153,7 @@ public void testUpdate() {
149
153
}
150
154
151
155
@ Test
152
- public void testJsonQuery () {
156
+ public void testDefererence () {
153
157
try (SqlSession sqlSession = sqlSessionFactory .openSession ()) {
154
158
JsonTestMapper mapper = sqlSession .getMapper (JsonTestMapper .class );
155
159
@@ -167,15 +171,15 @@ public void testJsonQuery() {
167
171
assertThat (rows ).isEqualTo (2 );
168
172
169
173
Optional <JsonTest > record = mapper .selectOne (c ->
170
- c .where (info , isEqualTo ( "{ \" firstName \" : \" Wilma \" , \" lastName \" : \" Flintstone \" , \" age \" : 25} " )));
174
+ c .where (dereference ( info , "age" ), isEqualTo ( "25 " )));
171
175
172
176
assertThat (record ).hasValueSatisfying ( c ->
173
177
c .getInfo ().equals ("{\" firstName\" : \" Wilma\" , \" lastName\" : \" Flintstone\" , \" age\" : 25}" ));
174
178
}
175
179
}
176
180
177
181
@ Test
178
- public void testDefererence () {
182
+ public void testDefererence2 () {
179
183
try (SqlSession sqlSession = sqlSessionFactory .openSession ()) {
180
184
JsonTestMapper mapper = sqlSession .getMapper (JsonTestMapper .class );
181
185
@@ -192,15 +196,19 @@ public void testDefererence() {
192
196
int rows = mapper .insertMultiple (record1 , record2 );
193
197
assertThat (rows ).isEqualTo (2 );
194
198
195
- Optional <JsonTest > record = mapper .selectOne (c ->
196
- c .where (dereference (info , "->>'age'" ), isEqualTo ("25" )));
199
+ SelectStatementProvider selectStatement = SqlBuilder .select (dereference (info , "firstName" ).as ("firstname" ))
200
+ .from (jsonTest )
201
+ .where (dereference (info , "age" ), isEqualTo ("25" ))
202
+ .build ()
203
+ .render (RenderingStrategies .MYBATIS3 );
197
204
198
- assertThat (record ).hasValueSatisfying ( c ->
199
- c .getInfo ().equals ("{\" firstName\" : \" Wilma\" , \" lastName\" : \" Flintstone\" , \" age\" : 25}" ));
205
+ List <Map <String , Object >> records = mapper .generalSelect (selectStatement );
206
+ assertThat (records .size ()).isEqualTo (1 );
207
+ assertThat (records .get (0 ).get ("firstname" )).isEqualTo ("Wilma" );
200
208
}
201
209
}
202
210
203
- private <T > SqlColumn <String > dereference (SqlColumn <T > column , String drString ) {
204
- return SqlColumn .of (column .name () + drString , column .table ());
211
+ private <T > SqlColumn <String > dereference (SqlColumn <T > column , String attribute ) {
212
+ return SqlColumn .of (column .name () + "->>'" + attribute + "'" , column .table ());
205
213
}
206
214
}
0 commit comments