mybatis返回map实现

一、前言
        有时候我们在进行Mybatis系统开发的时候,会遇到这样一些需求:期望查询一个表返回的结果是一个map,map的key表示表的一个字段,value则又另一个表的字段表示;比如:一个性别sex,一个对应人数number,其中sex为key,number为value。实现这样的需求有两种方式,一种是静态实现,对应的另一种是动态拦截实现。
 二、实现
  1、静态实现:指定查询 Mapper 语句的 resultType 为 map 时,返回的结果是一个 Map 列表;比如:
   mapper.xml:
<resultMap id="map">
<result property="sex" column="sex"/>
<result property="number" column="number"/>
</resultMap>
<select id="selectSex" resultClass="map">
        select sex,count(*) as number from person
</select>    java:
/**
 * 对某个学校计算校友
 *
 * @param school
 */
public void countFrends(School school) {
        Map<String, HashMap<String, Long>> mapSex = sqlSession .selectMap(SchoolConst.SELECT_SEX, school, SchoolConst.KEY);
if (Utils.checkNotNullAndUnempty(mapSex)) {
        if (Utils.checkNotNullAndUnempty(mapSex.get(FEMALE))) {
        school.setFemale(mapSex.get(FEMALE).get(SchoolConst.VALUE).intValue());
{color:#000000}}
        if (Utils.checkNotNullAndUnempty(mapSex.get(MALE))) {

        school.setMale(mapSex.get(MALE).get(SchoolConst.VALUE).intValue());
{color:#000000}}
        }

        }
        mapsex打印效果:{0={sex=0, number=25}, 1={sex=1, number=4}}
        很显然查询到的结果格式并不是我们真正想要。原因其实就是mapper先根据条件查询出一个List集合,然后遍历List集合,将对象以Key,Value(为查到的行记录)的形式存入Map中返回。那怎么样可以让 Mybatis 查询出来的结果是一个 Key 为表中某一列的值, Value 为表中另一列的值的 Map 呢?下面介绍一种利用拦截器进行动态拦截返回map的方法。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值