Fork me on GitHub

mybatis中实体对象映射方法

最开始写代码的时候我很苦恼,对于一个对象中含有另一个对象,每次从数据库拿到数据后都映射不过来,后来仔细学明白了做个汇总

public class SysUser implements Serializable {
    private static final long serialVersionUID = 3529219554011221820L;
    Integer id ;
    String userName ;
    String userId ;
    String userPassword ;
    String token ;
    
    SysRole sysRole ;

}

 

第一种映射方法,直接映射过去,缺点是,如果role是lsit集合,那么这个方法就不太行了,需要用到下一种方法

<select id="selectUserAndRoleByUserName1" resultType="library.system.dto.SysUser">
        select
        su.user_id ,
        su.user_name ,
        su.user_password ,
        sr.id as "sysRole.id" ,
        sr.role_name  as "sysRole.roleName" ,
        sr.role as "sysRole.role"
        from sys_user su
        inner join sys_user_role sur on su.user_id = sur.user_id
        inner join sys_role sr on sur.role_id = sr.id
        where su.user_name = #{userName}
    </select>

第二种,通过resultMap映射过去:

resultMap id="userMap" type="library.system.dto.SysUser">
        <result property="id" column="id"/>
        <result property="userName" column="user_name"/>
        <result property="userId" column="user_id"/>
        <result property="userPassword" column="user_password"/>
    </resultMap>
    
    <resultMap id="userMap1" extends="userMap" type="library.system.dto.SysUser">
        <collection property="sysRole" ofType="library.system.dto.SysRole">
            <result property="id" column="id"/>
            <result property="roleName" column="role_name"/>
            <result property="role" column="role"/>
        </collection>
    </resultMap>


<select id="selectUserAndRoleByUserName" resultMap="userMap1">
        select
        su.user_id ,
        su.user_name ,
        su.user_password ,
        sr.id ,
        sr.role_name  ,
        sr.role
        from sys_user su
        inner join sys_user_role sur on su.user_id = sur.user_id
        inner join sys_role sr on sur.role_id = sr.id
        where su.user_name = #{userName}
    </select>

这样一来,就能成功拿到role中数据了。

至此,结束。

posted @ 2021-03-05 15:21  叶语婷  阅读(1396)  评论(0编辑  收藏  举报