mybatis将查询结果分别封装到map的 key 和 value 中

 

一,mapper.xml中的查询配置:

<resultMap id="mapResultMap"   type="HashMap">
  <result property="key" column="key" jdbcType="VARCHAR" javaType="java.lang.String" />
  <result property="value" column="value" javaType="java.lang.Long" jdbcType="BIGINT" />
</resultMap>
<select id="queryxxx" parameterType="java.util.Map" resultMap="mapResultMap">
  select
    key,value
  from 表名
  where xxx
</select>


二,一个实现ResultHandler的实现类(将map结果进行对应的封装)

public class MyResultHandler implements ResultHandler{
    @SuppressWarnings("rawtypes")
    private final Map mappedResults = new HashMap();

    @SuppressWarnings("unchecked")
    @Override
    public void handleResult(ResultContext context) {
        @SuppressWarnings("rawtypes")
        Map map = (Map) context.getResultObject();
        mappedResults.put(map.get("key"), map.get("value")); // xml配置里面的property的值,对应的列
    }

    @SuppressWarnings("rawtypes")
    public Map getMappedResults() {
        return mappedResults;
    }
}



三,一个实现SqlSessionDaoSupport 接口的实现类 (在其中调用重写了ResultHandler的实现类的方法)


import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

@Repository
public class SessionMapper extends SqlSessionDaoSupport {

    @Override
    @Resource
    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
        super.setSqlSessionFactory(sqlSessionFactory);
    }

    /**
     * @return
     */
    @SuppressWarnings("unchecked")
    public Map<String,Long> queryBySaleNameList(HashMap paramMap){
        MyResultHandler handler = new MyResultHandler();
        //namespace : XxxMapper.xml 中配置的地址(XxxMapper.xml的qualified name)
        //.selectXxxxNum : XxxMapper.xml 中配置的方法名称
        //this.getSqlSession().select(namespace+".selectXxxxNum", handler);
        this.getSqlSession().select(xxxMapper.class.getName()+".queryBySaleNameList",paramMap, handler);
        Map<String, Long> map = handler.getMappedResults();
        return map;
    }
}

四,调用重写了的方法

Map resp = sessionMapper.queryBySaleNameList(paramMap);

总结:其实就是重写了mybatis的一套调用流程  使用我们自己重写后的方法实现查询结果的封装.

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值