解决java.lang.IndexOutOfBoundsException: Index: 1, Size: 1,关于Mybatis-Plus返回列表,返回值只有一个的问题

问题描述

我从数据库拿一些分类的数据,结果集是一个列表,下面是xml代码

<select id="getTimes" resultType="java.util.List">
    SELECT COUNT(is_promise)                               AS appTimes,
    SUM(CASE WHEN is_promise = 1 THEN 1 ELSE 0 END) AS comTimes,
    SUM(CASE WHEN is_promise = 2 THEN 1 ELSE 0 END) AS breTimes
    FROM `order`
    WHERE user_id = #{id}
</select>

这里的resultType返回值写List的话,执行结果只能拿到第一个值,我没去深入了解为什么,但我不想去创建新的对象去映射,因此我在网上也搜了蛮久,最终找到解决方法

解决方法

把返回值写成HsahMap,Mybatis-Plus会自动把值映射成hashmap集合,hashmap的key就是字段名,hashmap的值就是查询结果代码如下

xml代码

    <select id="getTimes" resultType="HashMap">
        SELECT COUNT(is_promise)                               AS appTimes,
               SUM(CASE WHEN is_promise = 1 THEN 1 ELSE 0 END) AS comTimes,
               SUM(CASE WHEN is_promise = 2 THEN 1 ELSE 0 END) AS breTimes
        FROM `order`
        WHERE user_id = #{id}
    </select>

mapper代码

    HashMap<String, Integer> getTimes(Integer id);

map结果

发现返回值和select语句的查询结果不一致,如果想要一致的话把resultType 的值写成java.util.LinkedHashMap,改了之后的返回值

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值