如何在Mybatis中的一对一嵌套查询中嵌套一对多查询

时间:2018-07-01 13:41:41

标签: java sql mybatis

这是我的SQL和resultmap

 <resultMap id="playerMap" type="player">
    <id column="playerId" property="id"/>
    <result column="playerName" property="name"/>
    <association property="team" javaType="Team">
        <id column="teamId" property="id"/>
        <result column="teamName" property="name"/>
    </association>
</resultMap>
<select id="selectPlayerById" resultMap="playerMap">
    select p.id playerId,p.name playerName,
    t.name teamName,t.id teamId
    from t_player p,t_team t
    where p.tid=t.id and p.id=#{id}
</select>

这是我的结果:

enter image description here

但是“玩家”列为空。如何更改我的SQL语句,以便此列可以查询多个播放器的信息?

1 个答案:

答案 0 :(得分:0)

首先,您必须弄清楚要表示什么样的关系。

对我来说,您的班级球员和会员球员似乎很像。那么,玩家可以有玩家吗?

如果要选择全部或几个玩家,则必须添加第二个select元素或将现有的元素更改为类似的内容:

<select id="selectPlayers" resultMap="playerMap">
    select p.id playerId,p.name playerName,
    t.name teamName,t.id teamId
    from t_player p,t_team t
    where p.tid=t.id
</select>

您可以根据需要扩展where子句。

如果您使用interfaces访问mybatis-xml-mappers中的方法,则必须将以下方法添加到特定的interface中:

List<Player> selectPlayers();

我们还可以将两个选择组合在一起,例如:

mapper-xml中只有一个select元素

<select id="selectPlayers" resultMap="playerMap">
    select p.id playerId,p.name playerName,
    t.name teamName,t.id teamId
    from t_player p,t_team t
    where p.tid=t.id
    <choose>
        <when test="id != null" >
            and p.id=#{id}
        </when>
        <when test="name != null" >
            and p.name=#{name}
        </when>
        <otherwise>

        </otherwise>
    </choose>
</select>

具有一种相应的interface方法:

List<Player> selectPlayers(@Param("id") long id, @Param("name") String name);