mybatis 高级结果映射、一对一、一对多

注:本文参考自刘增辉老师的《MyBatis从入门到精通》
在关系型数据库中,我们经常要处理一对一、一对多的关系。例如,一辆汽车需要有一个引擎,这是一对一的关系。 一辆汽车有4个或多个轮子,这是一对多的关系。
假设在系统中,一个用户只能拥有一个角色,为了举例,先把用户和角色之间的关系限制为一对一的关系。

1.1 一对一映射

1.1.1 使用自动映射处理一对一关系。

SysUser.java
/**
 * 用户
 */
@Data
public class SysUser {

    private String id;

    private String userName;

    private SysRole role;
}

 SysRole.java

/**
 * 用户角色
 **/
@Data
public class SysRole {

    private String id;

    private String roleName;

    private String userId;

}

使用自动映射就是通过别名让 mabatis 自动将值配到对应的字段上,简单的别名映射如user_name 对应 userName 。除此之外,mabatis 还支持复杂的属性映射,可以多层嵌套,例如将role.role_name 映射到 role.roleName 上。 mabatis 会先查找 role 属性,如果存在role属性就创建 role 对象,然后在 role 对象中继续查找 roleName ,将 role_name 的值绑定到 role 对象的roleName 属性上。

    <select id="selectUserAndRoleById" resultType="com.zhang.entity.SysUser">
        select u.*,r.*
        from `sys_user` u
        left join `sys_role` r
        on u.`id` = r.`user_id`
        where u.id = #{id}
    </select>

SysUserMapper.java

    /**
     * 根据用户 id 获取用户信息和用户的角色信息
     * @param id
     * @return
     */
    SysUser selectUserAndRoleById(String id);

 1.2 使用 resultMap 配置一对一映射

除了使用 MyBatis 的自动映射来处理一对一嵌套外,还可以在 XML 映射文件中配置结果
映射。我们使用 resultMap 实现上一节中相同的效果。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值