Mybatis对查询结果进行分组

7,047 阅读1分钟

引言

相信开发中大家都遇到过这种情况,select的结果我们想要进行进一步分组。比如我想获得以商品ID跟商品价格进行分组的结果。

{
    "goodsId": 1, // (作者注:商品ID)
    "price": 1000, // (作者注:商品价格)
    "coupons": [
       "双十一优惠券",
       "立减5块优惠券"
    ]
}

但通常经过表结合后select的结果会返回2行,不符合我们的格式。我们想要的是以商品ID跟商品价格进行分组。

goods_id    price   coupons
1           1000    双十一优惠券
1           1000    立减5块优惠券

使用ID标签

那怎么办呢?难道我们要在java中手动分组或者写更加复杂的select句吗?当然不用。mybatis为我们准备了分组功能。即使用ID标签。

<resultMap id="BaseResultMap" type="xxx.xxx.ResultDto">
    <!-- id标签表示分组单位 -->
    <id property="goodsId" column="goods_id"/>
    <id property="price" column="goods_price"/>
    
    <!-- 分组后放入list<String>的变量coupons  -->
    <collection property="coupons" ofType="string">
        <!-- 分组对象列gooods_coupon -->
        <result column="gooods_coupon"/>
    </collection>
</resultMap>

对应的java bean

public class ResultDto {
    /**
     * 商品ID
     */
    private Integer goodsId;

    /**
     * 商品价格
     */
    private Integer price;

    /**
     * 商品优惠
     */
    private List<String> coupons;

}