Mybatis使用selectMap返回结果集不是键值对形式<K, V>解决案

这篇博客介绍了如何在MyBatis中定义resultMap来映射查询结果到HashMap,以及如何重写ResultHandler进行结果处理。示例展示了查询语句从plan_work_info_detail表中根据条件获取plan_detail_id和business_name,并将它们作为key-value对存入HashMap。最后通过自定义的SelectMapKeyAndValue ResultHandler获取并返回查询结果。
定义resultMap
    <resultMap id="retMap"   type="java.util.HashMap">
        <result property="key" column="pwid_KEY"  javaType="java.lang.String"/>
        <result property="value" column="pwid_VALUE" javaType="java.lang.String"/>
    </resultMap>
查询语句
    <select id="selectPlanWorkInfoMap" resultMap="retMap">
      select
      plan_detail_id as pwid_KEY,
      business_name as pwid_VALUE
      from
      plan_work_info_detail
      <where>
          <if test="planScheduleId !=null">
              plan_schedule_id = #{planScheduleId}
          </if>
      </where>
    </select>
重写ResultHandler

import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;
 
import java.util.HashMap;
import java.util.Map;
 
 
public class SelectMapKeyAndValue implements ResultHandler {

    private final HashMap mappedResults = new HashMap();
	@SuppressWarnings({ "rawtypes", "unchecked" })
    @Override
    public void handleResult(ResultContext context) {
        Map map = (Map) context.getResultObject();
        mappedResults.put(map.get("key"), map.get("value"));
    }

    public HashMap getMappedResults() {
        return mappedResults;
    }
}
调用daoImpl方法实现

调用自定义重写的ResultHandler

    public HashMap getDataMap() {
        try{
            SelectMapKeyAndValue handler = new SelectMapKeyAndValue();
            sqlSessionTemplate.select("selectPlanWorkInfoMap", handler);
            HashMap map = handler.getMappedResults();
            return map;
        }catch(Exception e){
           e.printStackTrace();
        }
    }

结果

{AAA=00, BBB=00, CCC=00, DDD=00, EEE=00, FFF=00}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值