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

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

引言

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

解释一下其中的意思

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

  • 这就是改了个名字uuid变成了propId
  • 我的ofType属性是Map,可以理解为ArrayList values= null;
    其中column="{propId=uuid}"就是把uuid作为propid传入selectValue这个sql(第三句sql)
  • 在第三条sql中对结果数量进行限制就可以得到正确的结果了 limit 6

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/922538.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存