多表查询之多对多(联合查询),无法用bean对象接收,如何设定返回值--Map格式

193 阅读1分钟

设置resultMap,我们需要返回每个user的基本信息id,username,email,phoneNum,以及对应的角色,由于一个人可以承担多个角色,因此用collection来存档多个role的信息 注:property是指sql语句中需要使用的参数名 column是指数据库中表的列名

<resultMap id="userMap" type="User" >
    <id property="id" column="id" />
    <result property="username" column="username"/>
    <result property="email" column="email"/>
    <result property="phoneNum" column="phoneNum"/>
    <collection property="roleList" ofType="Role">
        <id property="id" column="r_id"/>
        <result property="roleName" column="r_roleName"/>
        <result property="roleDesc" column="r_roleDesc"/>
    </collection>
</resultMap>

<select id="list" resultMap="userMap">
    select u.id,u.username,u.email,u.phoneNum,r.id as r_id ,r.roleName as r_roleName,r.roleDesc as r_roleDesc from sys_user u
        left outer join sys_user_role ur on u.id = ur.userId
        left outer join sys_role r on ur.roleId = r.id
</select>

sys_user对应的实体类

public class User {

    private Long id;
    private String username;
    private String email;
    private String password;
    private String phoneNum;
    private List<Role> roleList;
    //setget方法省略
}

sys_role对应的实体类

public class Role {

    private Long id;
    private String roleName;
    private String roleDesc;
    //setget方法省略
}

对应的图表结构:由于sys_role表和sys_user表是多对多的关系,因此sys_user_role为中间表,记录两者关系。

image.png