可以研究下mybatis中<resultMap>标签中加入<collection>的用法即可解决该问题。
使用mybatis进行查询的时候一对多查询如何对‘多’的查询数量进行限制,还是在寒假期间做项目遇到的问题,在网上找了 半天没发现有合适的,就翻了下mybatis的官方说明文档,向下找 ‘集合的嵌套 Select 查询’
解释一下其中的意思
- 查找时调用selectBlog (第二句sql)并映射结果集到blogResult (第一句sql)
- 第一句sql中下面也有解释,简单讲就是一对多查询将‘多’的字段名定义为posts,数据类型为Post,传入执行selectPostsForBlog(第三条语句)的参数是column=“id”,用java可以表示为:ArrayList
posts = null; - 执行‘多’的查询其中的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` < 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
- 在第三条sql中对结果数量进行限制就可以得到正确的结果了 limit 6
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)