首页 > 技术文章 > mybatis一对多查询

zuoxh 2018-09-29 16:16 原文

public class UserDto implements Serializable{
/**
* 登录名
*/
private String loginName;
/**
* 昵称
*/
private String nickName;

/**
* 手机号码
*/
private String tel;
/**
* 邮箱地址
*/
private String email;

/**
* 账户是否锁定
*/
private Boolean locked;

/**
* 头像
*/
private String icon;

/**
* 用户所拥有的角色
*/
private Set<RoleDto> roleLists = Sets.newHashSet();

查询当前用户的信息和角色信息和当前用户的角色信息。一个用户有可能有多个角色。同时还要将用户每个角色的权限查询出来。

用上面这个实体类。一个用户多个角色则是一对多

<!-- 定义的map 通过用户名查询出用户的信息和用户的角色信息-->
<resultMap type="com.julu.appcloud.modules.system.dto.UserDto" id="UserAndRole">
<result property="loginName" column="login_name"/>
<result property="nickName" column="nick_name"/>
<result property="tel" column="tel"/>
<result property="email" column="email"/>
<result property="icon" column="icon" />
<result property="locked" column="locked"/>
<collection property="roleLists" ofType="com.julu.appcloud.modules.system.dto.RoleDto">
<result property="code" column="role.id"/>
<result property="name" column="role.name"/>
<!--<result property="name" column="role.name"/> -->
</collection>

</resultMap>
<!-- 通过用户名查询出用户的信息和用户的角色信息
UserDto findUserByUsername(String username); -->
<select id="findUserAndRoleByUsername" resultMap="UserAndRole">
select
u.id,
u.login_name,
u.nick_name,
u.tel,
u.email,
u.locked,
u.icon,
r.id AS "role.id",
r.name AS "role.name"
from
sys_user u
left join sys_user_role sur on sur.user_id = u.id
left join sys_role r on r.id = sur.role_id

where u.login_name=#{username}
</select>

查询出来在service实现类遍历menu.roleList()得到用户的每个角色名称和每个角色的id。

使用用户角色的名称个id查询出所有的Set<Menu> menuList

在将查询出来的menuList放入RoleDto的private Set<Menu> menuList属性中

推荐阅读