MyBatis 使用

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

增加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

Mapper接口类新增入参

public interface XXXMapper {
    // 注意,返回类型是void
    void loadAllConfig(@Param("config") String config, MapResultHandler<String> handler);
}
1
2
3
4

调用方式

MapResultHandler<String> rh = new MapResultHandler<>();
XXXMapper.loadAllConfig("id", rh);
Map<String, String> configMap = rh.getMappedResults();
1
2
3

参考

最近更新: 2023-04-03 01:58:44