我是靠谱客的博主 精明柠檬,最近开发中收集的这篇文章主要介绍MyBatis 的一对一,多对多一、概述二、实例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、概述

MyBatis 的一对一、多对多,主要就是 resultMap 两个属性的使用,而一对多和多对一都是相互的,只是站的角度不同:

  • 【一对多】association:一个复杂的类型关联。许多结果将包成这种类型
  • 【多对多】collection:复杂类型的集合

二、实例

以员工管理系统为例,说明两个属性的使用方法。

  • department 和 user,是一对多关系,一个部门可以拥有多个员工。
  • role 和 user 是多对多关系,一个角色可能有多个员工,而一个员工也可能有多个角色。而要实现多对多,在程序中则是拆分成两个一对多,详情见下面的实体类注释。

1️⃣User

@Data
public class User {

    private Integer id;

    private String username;
    
    private String address;

    //多对一,一个部门多个员工
    private Department dept;

    //一对多,一个用户可能有多个角色。
    private List<Role> roles;

    public User() {
    }
}

2️⃣Role

@Data
public class Role {

    Integer roleId;

    String roleName;

    //一对多,1个角色也可能被多个用户拥有,所以是list
    private List<User> users;

}

3️⃣Department

@Data
public class Department {

    Integer deptId;

    String deptName;

    //1对多,1个部门多个用户
    List<User> users;

}

4️⃣UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxp.dao.UserDao">

    <resultMap id="user" type="com.xxp.object.userManagement.User">
        <id property="id" column="user_id"></id>
        <result property="username" column="user_name"></result>
        <result property="address" column="user_address"></result>
        <!-- 【一对一】association 标签对应user中的dept成员变量的属性。-->
        <association property="dept" javaType="com.xxp.object.userManagement.Department">
            <result property="deptName" column="dept_name"></result>
        </association>
        <!-- 【多对多】 collection代表集合 roles代表User中成员变量的名字 -->
        <collection property="roles" ofType="com.xxp.object.userManagement.Role">
            <id property="roleId" column="role_id"></id>
            <result property="roleName" column="role_name"></result>
        </collection>
    </resultMap>

    <!-- 一对一 -->
    <select id="queryOneToOne" resultMap="user">
        select u.*,d.dept_name from t_user u , t_department d where u.dept_id = d.dept_id
    </select>


    <!-- 多对多 -->
    <select id="queryManyToMany" resultMap="user">
        select * from t_user u
        left join t_user_role ur on u.user_id=ur.uid
        left join t_role r on ur.rid=r.role_id
    </select>

</mapper>

不管是一对多、多对一,还是多对多,只需要知道这两个属性哪个代表多哪个代表一,就可以很好的在实体的mapper文件中配置出来。

最后

以上就是精明柠檬为你收集整理的MyBatis 的一对一,多对多一、概述二、实例的全部内容,希望文章能够帮你解决MyBatis 的一对一,多对多一、概述二、实例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部