MyBatis妙用 ¶
ResultHandler ¶
sql如下,需要返回map;map key为 查询结果id,map value为查询结果的 name;此时可以用 ResultHandler 对查询结果集处理,返回需要的 map
sql
1select id,name from t_user;编写MapResultHandler 实现 ResultHandler 接口
java1@SuppressWarnings("all") 2public class MapResultHandler<K,V> implements ResultHandler<Map<K,V>> { 3 private final Map<K,V> mappedResults = new HashMap<>(); 4 5 @Override 6 public void handleResult(ResultContext context) { 7 Map map = (Map) context.getResultObject(); 8 mappedResults.put((K)map.get("key"), (V)map.get("value")); 9 } 10 11 public Map<K,V> getMappedResults() { 12 return mappedResults; 13 } 14}编写接口方法和mapper文件,
注意接口方法没有任何返回值接口:
java1void getNameMapResult(MapResultHandler<String,Long> resultHandler,@Param("param") String param);mapper文件:
xml1<!-- 这里的key和value为标识,方便ResultHandler循环处理结果时取值 --> 2<resultMap id="resMap" type="java.util.HashMap"> 3 <result property="key" column="id" javaType="java.lang.String"/> 4 <result property="value" column="name" javaType="java.lang.Long"/> 5</resultMap> 6<select id="getUserResult" resultMap="resMap"> 7 select id as id ,name as name from t_user; 8</select>调用
java1// MapResultHandler 实例 2MapResultHandler<String,String> resultHandler = new MapResultHandler<>(); 3// 调用方法,传入 MapResultHandler 实例 和需要的参数 4queryMapper.getUserResult(resultHandler,"1527147"); 5// 通过 MapResultHandler 实例获取需要的结果 6Map<String, String> results = resultHandler.getMappedResults();
@MapKey注解 ¶
MapKey 注解标注在mapper接口方法上
作用:结果返回为 map 对象,map key为 @MapKey 标识的字段,value 为查询的结果集
示例:
mapper 接口
java
1@MapKey("id")
2Map<String,User> getUserMap();mapper 文件
xml
1<select id="getUserResult" resultMap="org.lei.entity.User">
2 select id "id" ,name name from t_user;
3</select>返回结果map结构如下
json
1{
2 id1: {
3 userId: id1,
4 userName: name1
5 },
6 id2: {
7 userId: id2,
8 userName: name2
9 }
10 ...
11}