mybatis_plus一对多实体映射

场景:用户表和角色表经过中间表关联,要根据用户id获取用户拥有的角色列表java

1、数据结构sql

一、用户表数据库

二、角色表数据结构

三、中间表app

方法一:在mapper类用注解,自定义sqlui

@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自定义sqlcode

<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>

还可关联上用户表,以下xml

<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>

注:blog

一、property与java实体类的字段对应,column与数据库字段对应。get

二、collection的id表示sys_uer_role与sys_role关联的字段

三、select后的字段要在result里写明,好比select r.name对应了 <result column="name" property="name" />

四、这里的实体能够是与数据库对应的实体,也能够是自定义实体

相关文章
相关标签/搜索