Skip to content

Commit df20dbe

Browse files
🐛 Native Support HashMap/TreeSet/HashSet
#994
1 parent 0a22142 commit df20dbe

File tree

7 files changed

+105
-1
lines changed

7 files changed

+105
-1
lines changed

mybatis-spring-boot-autoconfigure/src/main/resources/META-INF/native-image/org.mybatis.spring.boot/mybatis-spring-boot-autoconfigure/mybatis-reflection.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,8 @@
1010
{ "name": "org.apache.ibatis.scripting.xmltags.XMLLanguageDriver", "methods": [{ "name": "<init>", "parameterTypes": [] }] },
1111
{ "name": "org.apache.ibatis.scripting.defaults.RawLanguageDriver", "methods": [{ "name": "<init>", "parameterTypes": [] }] },
1212
{ "name": "org.mybatis.spring.SqlSessionFactoryBean", "allDeclaredConstructors": true, "allDeclaredMethods": true },
13-
{ "name": "java.util.ArrayList", "methods": [{ "name": "<init>", "parameterTypes": [] }] }
13+
{ "name": "java.util.ArrayList", "methods": [{ "name": "<init>", "parameterTypes": [] }] },
14+
{ "name": "java.util.HashMap", "methods": [{ "name": "<init>", "parameterTypes": [] }] },
15+
{ "name": "java.util.TreeSet", "methods": [{ "name": "<init>", "parameterTypes": [] }] },
16+
{ "name": "java.util.HashSet", "methods": [{ "name": "<init>", "parameterTypes": [] }] }
1417
]

mybatis-spring-boot-samples/mybatis-spring-boot-sample-graalvm-annotation/src/main/java/sample/mybatis/graalvm/annotation/SampleAnnotationApplication.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ public SampleAnnotationApplication(CityMapper cityMapper) {
3838
@SuppressWarnings("squid:S106")
3939
public void run(String... args) {
4040
System.out.println(this.cityMapper.findByState("CA"));
41+
System.out.println(this.cityMapper.listByState("ShanDong"));
42+
System.out.println(this.cityMapper.mapByState("CA"));
43+
System.out.println(this.cityMapper.listMapByState("ShanDong"));
44+
System.out.println(this.cityMapper.treeSetStateByState("CN"));
45+
System.out.println(this.cityMapper.hashSetStateByState("CN"));
4146
}
4247

4348
}

mybatis-spring-boot-samples/mybatis-spring-boot-sample-graalvm-annotation/src/main/java/sample/mybatis/graalvm/annotation/mapper/CityMapper.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
*/
1616
package sample.mybatis.graalvm.annotation.mapper;
1717

18+
import java.util.HashSet;
19+
import java.util.List;
20+
import java.util.Map;
21+
import java.util.TreeSet;
22+
1823
import org.apache.ibatis.annotations.Mapper;
1924
import org.apache.ibatis.annotations.Param;
2025
import org.apache.ibatis.annotations.Select;
@@ -30,4 +35,19 @@ public interface CityMapper {
3035
@Select("select id, name, state, country from city where state = #{state}")
3136
City findByState(@Param("state") String state);
3237

38+
@Select("select id, name, state, country from city where state = #{state}")
39+
List<City> listByState(@Param("state") String state);
40+
41+
@Select("select id, name, state, country from city where state = #{state}")
42+
Map<String, Object> mapByState(@Param("state") String state);
43+
44+
@Select("select id, name, state, country from city where state = #{state}")
45+
List<Map<String, Object>> listMapByState(@Param("state") String state);
46+
47+
@Select("select state from city where country = #{country}")
48+
TreeSet<String> treeSetStateByState(@Param("country") String country);
49+
50+
@Select("select state from city where country = #{country}")
51+
HashSet<String> hashSetStateByState(@Param("country") String country);
52+
3353
}

mybatis-spring-boot-samples/mybatis-spring-boot-sample-graalvm-annotation/src/main/resources/data.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,5 @@
1515
--
1616

1717
insert into city (name, state, country) values ('San Francisco', 'CA', 'US');
18+
insert into city (name, state, country) values ('Jinan', 'ShanDong', 'CN');
19+
insert into city (name, state, country) values ('Tsingtao', 'ShanDong', 'CN');

mybatis-spring-boot-samples/mybatis-spring-boot-sample-graalvm-annotation/src/test/java/sample/mybatis/graalvm/annotation/SampleMybatisApplicationMainTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ void test(OutputCapture outputCapture) {
3333
SampleAnnotationApplication.main(new String[] {});
3434
String output = outputCapture.toString();
3535
assertThat(output).contains("1,San Francisco,CA,US");
36+
assertThat(output).contains("2,Jinan,ShanDong,CN");
37+
assertThat(output).contains("3,Tsingtao,ShanDong,CN");
38+
assertThat(output).contains("{COUNTRY=CN, STATE=ShanDong, ID=2, NAME=Jinan}");
39+
assertThat(output).contains("{COUNTRY=CN, STATE=ShanDong, ID=3, NAME=Tsingtao}");
3640
}
3741

3842
}

mybatis-spring-boot-samples/mybatis-spring-boot-sample-graalvm-annotation/src/test/java/sample/mybatis/graalvm/annotation/SampleMybatisApplicationTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ class SampleMybatisApplicationTest {
3535
void test(OutputCapture outputCapture) {
3636
String output = outputCapture.toString();
3737
assertThat(output).contains("1,San Francisco,CA,US");
38+
assertThat(output).contains("2,Jinan,ShanDong,CN");
39+
assertThat(output).contains("3,Tsingtao,ShanDong,CN");
40+
assertThat(output).contains("{COUNTRY=CN, STATE=ShanDong, ID=2, NAME=Jinan}");
41+
assertThat(output).contains("{COUNTRY=CN, STATE=ShanDong, ID=3, NAME=Tsingtao}");
3842
}
3943

4044
}

mybatis-spring-boot-samples/mybatis-spring-boot-sample-graalvm-annotation/src/test/java/sample/mybatis/graalvm/annotation/mapper/CityMapperTest.java

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@
1616
package sample.mybatis.graalvm.annotation.mapper;
1717

1818
import static org.assertj.core.api.Assertions.assertThat;
19+
import static org.assertj.core.api.Assertions.entry;
20+
21+
import java.util.HashSet;
22+
import java.util.List;
23+
import java.util.Map;
24+
import java.util.TreeSet;
1925

2026
import org.junit.jupiter.api.Test;
2127
import org.mybatis.spring.boot.test.autoconfigure.MybatisTest;
@@ -45,4 +51,64 @@ void findByStateTest() {
4551
assertThat(city.getCountry()).isEqualTo("US");
4652
}
4753

54+
@Test
55+
void listByStateTest() {
56+
List<City> cityList = cityMapper.listByState("ShanDong");
57+
assertThat(cityList).isNotNull();
58+
assertThat(cityList.size()).isEqualTo(2);
59+
60+
assertThat(cityList).satisfies(cities -> {
61+
assertThat(cities).filteredOn(city -> city.getId() == 2 && "Jinan".equals(city.getName())
62+
&& "ShanDong".equals(city.getState()) && "CN".equals(city.getCountry())).hasSize(1);
63+
assertThat(cities).filteredOn(city -> city.getId() == 3 && "Tsingtao".equals(city.getName())
64+
&& "ShanDong".equals(city.getState()) && "CN".equals(city.getCountry())).hasSize(1);
65+
});
66+
}
67+
68+
@Test
69+
void mapByStateTest() {
70+
Map<String, Object> map = cityMapper.mapByState("CA");
71+
assertThat(map).isNotNull();
72+
assertThat(map.size()).isEqualTo(4);
73+
assertThat(map).satisfies(cities -> {
74+
assertThat(cities)
75+
.contains(entry("ID", 1), entry("NAME", "San Francisco"), entry("STATE", "CA"), entry("COUNTRY", "US"))
76+
.isNotNull();
77+
});
78+
}
79+
80+
@Test
81+
void listMapByStateTest() {
82+
List<Map<String, Object>> cityList = cityMapper.listMapByState("ShanDong");
83+
assertThat(cityList).isNotNull();
84+
assertThat(cityList).satisfies(map -> {
85+
assertThat(map).isNotNull();
86+
assertThat(map.size()).isEqualTo(2);
87+
assertThat(map).satisfies(cities -> {
88+
assertThat(cities).filteredOn(city -> city.size() == 4 && city.get("ID") instanceof Integer
89+
&& (Integer) city.get("ID") == 2 && "Jinan".equals(city.get("NAME")) && "ShanDong".equals(city.get("STATE"))
90+
&& "CN".equals(city.get("COUNTRY"))).hasSize(1);
91+
assertThat(cities).filteredOn(city -> city.size() == 4 && city.get("ID") instanceof Integer
92+
&& (Integer) city.get("ID") == 3 && "Tsingtao".equals(city.get("NAME"))
93+
&& "ShanDong".equals(city.get("STATE")) && "CN".equals(city.get("COUNTRY"))).hasSize(1);
94+
});
95+
});
96+
}
97+
98+
@Test
99+
void treeSetStateByStateTest() {
100+
TreeSet<String> stateSet = cityMapper.treeSetStateByState("CN");
101+
assertThat(stateSet).isNotNull();
102+
assertThat(stateSet.size()).isEqualTo(1);
103+
assertThat(stateSet.first()).isEqualTo("ShanDong");
104+
}
105+
106+
@Test
107+
void hashSetStateByStateTest() {
108+
HashSet<String> stateSet = cityMapper.hashSetStateByState("CN");
109+
assertThat(stateSet).isNotNull();
110+
assertThat(stateSet.size()).isEqualTo(1);
111+
assertThat(stateSet).contains("ShanDong");
112+
}
113+
48114
}

0 commit comments

Comments
 (0)