Mybatis有中间表时,多表关联查询

现在有三个表: user,role,user_role
根据三个表创建映射实体类:
class User {
private int id;
private String username;
private String password;
//get set
class Role {
private int id;
private String role;
//get set
}
public class UserRole {
private int id;
private int u_id;
private int r_id;
private User users;
private Role roles;
//get set
}
这里把User,Role 放到UserRole里是最简单的方式,当一个User对应多个Role的时候,这样写取出多个Role也是最方便的,有人会说为什么不把private Role roles; 换成private List<Role> roles;这是因为我们有很多业务会直接取Role中的role属性,所以使用这种方法取role属性的时候也是最方便的。
UserRoleMapper.xml:
<mapper namespace="com.demo.dao.UserRoleDao">
<resultMap type="com.demo.bean.UserRole" id="BaseColumn">
<id column="id" property="id" />
<result column="u_id" property="u_id" />
<result column="r_id" property="r_id" />
<association property="users" javaType="com.demo.bean.User">
<id column="id" property="id" />
<result column="username" property="username" />
<result column="password" property="password" />
</association>
<association property="roles" javaType="com.demo.bean.Role">
<id column="id" property="id" />
<result column="role" property="role" />
</association>
</resultMap>
 
<sql id="base">
ur.id ,
ur.u_id,
ur.r_id
</sql>
 
<sql id="userColumn">
u.id,
u.username,
u.password
</sql>
 
<sql id="roleColumn">
r. id,
r. role
</sql>
 
<select id="selectUserWithRoles" resultMap="BaseColumn">
select
<include refid="base" />,
<include refid="userColumn" />, ,
<include refid="roleColumn" />
from user_role ur
LEFT JOIN `user` u on u.id=ur.u_id
LEFT join role r on
r.id=ur.r_id
where
u_id=#{u_id}
</select>
</mapper>
这样三个表就关联好了。

猜你喜欢

转载自www.cnblogs.com/cyqjava/p/9025973.html