MyBatis 使用
Hz 2023-04-03 Monday MyBatis
MyBatis 使用技巧总结
使用自定义ResultHandler
新增ResultHandler
import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;
import java.util.HashMap;
import java.util.Map;
public class MapResultHandler<T> implements ResultHandler<T> {
private final Map<String,T> mappedResults = new HashMap<>();
@SuppressWarnings ("unchecked")
@Override
public void handleResult(ResultContext context) {
Map<String, T> map = (Map<String, T>)context.getResultObject();
mappedResults.put((String)getFromMap(map,"key"), (T) getFromMap(map, "value"));
}
public Map<String, T> getMappedResults() {
return mappedResults;
}
// see note at bottom of answer as to why I include this method
private Object getFromMap(Map<String, T> map, String key) {
if (map.containsKey(key.toLowerCase())) {
return map.get(key.toLowerCase());
} else {
return map.get(key.toUpperCase());
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
增加MyBatis配置映射关系
<resultMap id="mapValue" type="java.util.HashMap" >
<result column="name" jdbcType="VARCHAR" property="key" />
<result column="value" jdbcType="VARCHAR" property="value" />
</resultMap>
1
2
3
4
2
3
4
Mapper接口类新增入参
public interface XXXMapper {
// 注意,返回类型是void
void loadAllConfig(@Param("config") String config, MapResultHandler<String> handler);
}
1
2
3
4
2
3
4
调用方式
MapResultHandler<String> rh = new MapResultHandler<>();
XXXMapper.loadAllConfig("id", rh);
Map<String, String> configMap = rh.getMappedResults();
1
2
3
2
3