Mybatis中使用级联查询,一对多的查询
一、需求描述
自己在开发一个小程序的过程中,需要做的一个查询是稍微比较复杂的查询,根据用户信息去查询用户所对应的宠物信息。
一个用户可能对应多个宠物,所以在用户和宠物信息的对应关系就是一对多的关系。
二、需求分析
以前在学习mybatis的时候,大致记得mybatis里面有级联查询的功能,只需要在xml文件中写好响应的sql和配置好响应的
查询即可。自己立马去百度里面搜索,看了几篇博文,把以前学习的东西都记起来了,立马进行使用。
三、解决方案
涉及输出类,里面包含集合类型,如下
主查询语句如下//
<select id="userRank" resultMap="userRankResultMap">
SELECT
@rownum := @rownum + 1 user_rank,
tab.user_id,
tab.nick_name,
tab.user_name,
IFNULL(tab.avatar_url, '') avatar_url,
tab.user_experience,
tab.user_level,
tab.openid
FROM
(SELECT @rownum := 0) a,
(
SELECT
f.user_id,
f.nick_name,
f.user_name,
f.avatar_url,
f.user_experience,
f.user_level,
SUM(
IFNULL(f.user_experience, 0)
) expSum,
f.openid
FROM
app_user_info f WHERE f.status = 1
GROUP BY
f.user_id
ORDER BY
expSum DESC
) tab
</select>
查询结果集为
<!-- 查询结果集 -->
<resultMap id="userRankResultMap" type="applets.user.outvo.RankOutVo">
<id column="user_rank" property="userRank" jdbcType="INTEGER" />
<result column="user_id" property="userId" jdbcType="VARCHAR" />
<result column="nick_name" property="nickName" jdbcType="VARCHAR" />
<result column="user_name" property="userName" jdbcType="VARCHAR" />
<result column="avatar_url" property="avatarUrl" jdbcType="VARCHAR" />
<result column="user_experience" property="userExperience" jdbcType="INTEGER" />
<result column="user_level" property="userLevel" jdbcType="INTEGER" />
<result column="openid" property="openid" jdbcType="VARCHAR" />
<!-- 关联查询用户已经领养宠物列表
ofType:指定关联查询的结果集中的对象类型即List中的对象类型。
collection:表示一对多当中的集合类型
column:表示主查询和关联查询之间的关联条件
-->
<collection property="petList" ofType="applets.nature.entiry.PetInfo" column="openid" select="selectPetInfo">
</collection>
</resultMap>
最后一个关联查询为
<!-- 排名查询中的子查询 -->
<select id="selectPetInfo" resultType="applets.nature.entiry.PetInfo">
SELECT pet_id, pet_type, pet_name, pet_level
FROM app_pet_info
WHERE openid = #{openid, jdbcType = VARCHAR}
AND species_type = 2
AND is_adopt = 1
ORDER BY pet_level DESC
LIMIT 3
</select>
写好后测试结果正确。打印的日志为先查询第一个主查询,关联查询会查询多次。
参考文章:
https://www.cnblogs.com/yigedingzi/p/10836734.html
https://zhuanlan.zhihu.com/p/40621891