2020import static org .mybatis .dynamic .sql .SqlBuilder .*;
2121
2222import java .util .List ;
23+ import java .util .Map ;
2324import java .util .Optional ;
2425
2526import org .apache .ibatis .mapping .Environment ;
3132import org .junit .jupiter .api .BeforeAll ;
3233import org .junit .jupiter .api .BeforeEach ;
3334import org .junit .jupiter .api .Test ;
35+ import org .mybatis .dynamic .sql .SqlBuilder ;
3436import org .mybatis .dynamic .sql .SqlColumn ;
3537import org .mybatis .dynamic .sql .delete .DeleteDSLCompleter ;
38+ import org .mybatis .dynamic .sql .render .RenderingStrategies ;
3639import org .mybatis .dynamic .sql .select .SelectDSLCompleter ;
40+ import org .mybatis .dynamic .sql .select .render .SelectStatementProvider ;
3741import org .testcontainers .junit .jupiter .Container ;
3842import org .testcontainers .junit .jupiter .Testcontainers ;
3943
@@ -42,7 +46,7 @@ public class CustomRenderingTest {
4246
4347 @ Container
4448 private static PgContainer postgres = new PgContainer ("examples/custom_render/dbInit.sql" );
45-
49+
4650 private static SqlSessionFactory sqlSessionFactory ;
4751
4852 @ BeforeAll
@@ -149,7 +153,7 @@ public void testUpdate() {
149153 }
150154
151155 @ Test
152- public void testJsonQuery () {
156+ public void testDefererence () {
153157 try (SqlSession sqlSession = sqlSessionFactory .openSession ()) {
154158 JsonTestMapper mapper = sqlSession .getMapper (JsonTestMapper .class );
155159
@@ -167,15 +171,15 @@ public void testJsonQuery() {
167171 assertThat (rows ).isEqualTo (2 );
168172
169173 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 " )));
171175
172176 assertThat (record ).hasValueSatisfying ( c ->
173177 c .getInfo ().equals ("{\" firstName\" : \" Wilma\" , \" lastName\" : \" Flintstone\" , \" age\" : 25}" ));
174178 }
175179 }
176180
177181 @ Test
178- public void testDefererence () {
182+ public void testDefererence2 () {
179183 try (SqlSession sqlSession = sqlSessionFactory .openSession ()) {
180184 JsonTestMapper mapper = sqlSession .getMapper (JsonTestMapper .class );
181185
@@ -192,15 +196,19 @@ public void testDefererence() {
192196 int rows = mapper .insertMultiple (record1 , record2 );
193197 assertThat (rows ).isEqualTo (2 );
194198
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 );
197204
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" );
200208 }
201209 }
202210
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 ());
205213 }
206214}
0 commit comments