mybatis 实现一对多查询并限制每个分组的条数(一对多查询limit数量不对的解决方法)

引言

可以研究下mybatis中<resultMap>标签中加入<collection>的用法即可解决该问题。
使用mybatis进行查询的时候一对多查询如何对‘多’的查询数量进行限制,还是在寒假期间做项目遇到的问题,在网上找了 半天没发现有合适的,就翻了下mybatis的官方说明文档,向下找 ‘集合的嵌套 Select 查询’
请添加图片描述
解释一下其中的意思

  1. 查找时调用selectBlog (第二句sql)并映射结果集到blogResult (第一句sql)
  2. 第一句sql中下面也有解释,简单讲就是一对多查询将‘多’的字段名定义为posts,数据类型为Post,传入执行selectPostsForBlog(第三条语句)的参数是column=“id”,用java可以表示为:ArrayList<Post> posts = null;
  3. 执行‘多’的查询其中的BLOG_ID = #{id} id就是<collection column=“id”>这个标签的column属性传递过去的

所以就有了我的一段代码

    <!--主查询  获取产品类别的属性值有哪些用于配置分类标签-->
    <!-- 封装查询结果 -->
    <resultMap id="CateAndValueMap" type="Map">
        <result column="uuid" property="propId"/>
        <collection property="values" javaType="ArrayList" column="{propId=uuid}"
                    ofType="Map" select="selectValue"/>
    </resultMap>
    <select id="getProCateAndValue" parameterType="Map" resultMap="CateAndValueMap">
        SELECT DISTINCT a.uuid,a.cid,a.name,a.type
        FROM property a
        WHERE a.active = true
        AND a.`order` &lt; 5
        AND a.cid = #{cid}
        ORDER BY a.`order`
    </select>
    <select id="selectValue" resultType="Map">
        SELECT DISTINCT b.`value` FROM propertyvalue b
        WHERE b.active = true AND b.value != ''
        AND b.propId = #{propId}
        limit 6
    </select>

CateAndValueMap 结果映射集是最重要的

  • <result column=“uuid” property=“propId”/>这就是改了个名字uuid变成了propId
  • 我的ofType属性是Map,可以理解为ArrayList<Map> values= null;
    其中column="{propId=uuid}"就是把uuid作为propid传入selectValue这个sql(第三句sql)
  • 在第三条sql中对结果数量进行限制就可以得到正确的结果了 limit 6
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值