Map接收Mybatis的结果,字段1为Key,字段2为Val

Map接收Mybatis的结果,字段1为Key,字段2为Val

先上效果图

查询用户信息
封装到Map中

介绍

1.有时候我们想将mybatis查出来的数据封装到一个map中,从而循环list根据id直接从map中取值。但是mybatis默认封装的map是将字段作为map的key,字段对应的值作为map的值,sql查出一条数据可以,但是有多个结果集,就不能单纯用map来接收了,必须使用List<Map<K,V>>来接收,循环然后map.get,封装成map,见下图,无疑这么操作很是恶心。
原来操作
2.mybaits这么强大一个框架肯定邮箱对应的解决措施,在贵人的指导下,最终还是被我找到了解决措施。核心思想就是mybatis提供了一个名字叫做ResultHandler的结果处理器,他能感知到你的每条数据(可以当做limit 1来理解),拿到该条数据你加工下,继续拿下一条数据,有点类似于for循环,每次拿到数据放到map中,最后拿到这个map。接下来开始着手实现。
3.首先 xml写好sql,@select注解也可以,但是没有xml方便,因为需要返货resultMap
xml的sql
这里我们查询id和name,返回类型是resultMap,然后新建个resultMap,id对应上,注意resultMap的类型是hashmap,将我们的id映射成key,name映射成value,这个key和value是做个标记,去的时候需要用到
4.新建个xml对应的接口,注意这里方法的形参为我自定义的一个类,有其他参数在这个参数之前写即可,这里的方法返回值必须为void返回进不去ResultHandle
mapper接口
5.新建自定义ResultHandle

@SuppressWarnings("all")
public class MapResultHandler<K,V> implements ResultHandler<Map<K,V>> {
    private final Map<K,V> mappedResults = new HashMap<>();

    @Override
    public void handleResult(ResultContext context) {
        Map map = (Map) context.getResultObject();
        mappedResults.put((K)map.get("key"), (V)map.get("value"));
    }

    public Map<K,V> getMappedResults() {
        return mappedResults;
    }
}

加工数据
这里的key和value是xml中映射的,这个类的大致意思就是新建一个mappedResults,每次感应到数据进来,处理下然后塞进去。
6.使用
使用
代码:

@SpringBootTest
@RunWith(SpringRunner.class)
public class TestMapper {

    @Autowired
    private UserMapper userMapper;


    @Test
    public void mybatisMapTest() {
        MapResultHandler<Integer, String> resultHandler = new MapResultHandler<>();
        userMapper.data(resultHandler);
        Map<Integer, String> map = resultHandler.getMappedResults();
        System.out.println("map = " + map);

    }
}

末尾

giee地址:gitee地址

本人小白,多多指教!有问题留言即可!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值