Mybatis:多对多查询

需求

        查询⽤户同时查询出该⽤户的所有⻆⾊

Bean 

public class User implements Serializable {

    private Integer id;
    private String username;

    //表示用户关联的角色
    private List<Role> roleList = new ArrayList<>();
}


public class Role {

    private Integer id;
    private String roleName;
    private String roleDesc;
}

第一种方式XML

Mapper

public interface IUserMapper {

    //查询所有用户、同时查询每个用户关联的角色信息
    public List<User> findAllUserAndRole();
}

XML

    <resultMap id="userRoleMap" type="com.lagou.pojo.User">
        <result property="id" column="userid"></result>
        <result property="username" column="username"></result>
        <collection property="roleList" ofType="com.lagou.pojo.Role">
            <result property="id" column="roleid"></result>
            <result property="roleName" column="roleName"></result>
            <result property="roleDesc" column="roleDesc"></result>
        </collection>
    </resultMap>

    <select id="findAllUserAndRole" resultMap="userRoleMap">
        select * from user u left join sys_user_role ur on u.id = ur.userid
										 left join sys_role r on r.id = ur.roleid
    </select>

第二种方式注解

Mapper

public interface IUserMapper {

    //查询所有用户、同时查询每个用户关联的角色信息
    @Select("select * from user")
    @Results({
            @Result(property = "id",column = "id"),
            @Result(property = "username",column = "username"),
            @Result(property = "roleList",column = "id",javaType = List.class,
             many = @Many(select = "com.lagou.mapper.IRoleMapper.findRoleByUid"))
    })
    public List<User> findAllUserAndRole();
}



public interface IRoleMapper {

    @Select("select * from sys_role r,sys_user_role ur where r.id = ur.roleid and ur.userid = #{uid}")
    public List<Role> findRoleByUid(Integer uid);
}