场景:用户表和角色表通过中间表关联,要根据用户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、这里的实体可以是与数据库对应的实体,也可以是自定义实体
来源:oschina
链接:https://my.oschina.net/u/2427561/blog/3138316