mybatis_plus一對多實體映射

場景:用戶表和角色表通過中間表關聯,要根據用戶id獲取用戶擁有的角色列表

一、數據結構

1、用戶表

2、角色表

3、中間表

方法一:在mapper類用註解,自定義sql

 @Select("select r.name from sys_role r LEFT JOIN sys_uer_role ur on ur.role_id=r.id where uid=#{uid}")
 List<Role> getRoles(String userId);

方法二:xml自定義sql

<resultMap id="BaseColumn" type="com.xiao.permission_system.entity.Role">
    <id property="id" column="id" />
    <result column="name" property="name" />
    <collection property="users" ofType="com.xiao.permission_system.entity.UerRole">
        <id property="id" column="role_id"/>
    </collection>
</resultMap>
<select id="getRoles" resultMap="BaseColumn">
    select
    r.name
    from sys_role r
    LEFT JOIN sys_uer_role ur on ur.role_id=r.id
    where
    uid=#{uid}
</select>

還可關聯上用戶表,如下

<resultMap id="BaseColumn" type="com.xiao.permission_system.entity.Role">
    <id property="id" column="id" />
    <result column="name" property="name" />
    <collection property="uerRoles" ofType="com.xiao.permission_system.entity.UerRole">
        <id property="id" column="role_id"/>
        <collection property="users" ofType="com.xiao.permission_system.entity.UserInfo">
            <id property="id" column="id"/>
            <result column="username" property="username" />
            <result column="password" property="password" />
        </collection>
    </collection>
</resultMap>
<select id="getRoles" resultMap="BaseColumn">
    select
    r.name,u.password,u.username
    from sys_role r
    LEFT JOIN sys_uer_role ur on ur.role_id=r.id
    LEFT JOIN sys_user_info u on u.id = ur.uid
    where
    u.id=#{uid}
</select>

注:

1、property與java實體類的字段對應,column與數據庫字段對應。

2、collection的id表示sys_uer_role與sys_role關聯的字段

3、select後的字段要在result裏寫明,比如select r.name對應了 <result column="name" property="name" />

4、這裏的實體可以是與數據庫對應的實體,也可以是自定義實體

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章