MyBatis一对多、多对一

前言:

resultMap中 :
association – 一个复杂的类型关联;许多结果将包成这种类型(一对多) 
collection – 复杂类型的集合(多对一) 

一、例子1:

1对多关系,1个部门拥有多个员工。 role和user是多对多关系,1个角色可能有多个员工,而1个员工也可能有多个角色。而要实现多对多,在程序中则是拆分成2个一对多。

多对一:多个user对应1个department,使用association


<?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="employee_management.mapper.UserDepartmentMapper">
    <resultMap type="employee_management.entity.User"
        id="userDepartmentList">
        <id property="user_id" column="user_id" javaType="java.lang.Integer" />
        <result property="user_name" column="user_name" javaType="java.lang.String" />
        <result property="user_gender" column="user_gender" javaType="java.lang.String" />
        <result property="user_email" column="user_email" javaType="java.lang.String" />
        <result property="user_phone" column="user_phone" javaType="java.lang.String" />
        <result property="user_address" column="user_address" javaType="java.lang.String" />
        <result property="user_birthday" column="user_birthday"
            javaType="java.util.Date" />
        <result property="department_id" column="department_id"
            javaType="java.lang.Integer" />
            <!-- property是user实体类中department类属性的名字
            多个user对应1个department-->
        <association property="department"
            javaType="employee_management.entity.Department">
            <id property="department_id" column="department_id" javaType="java.lang.Integer" />
            <result property="department_name" column="department_name"
                javaType="java.lang.String" />
        </association>
    </resultMap>

    <select id="getAll" resultMap="userDepartmentList">
        select u.*,d.department_name from user u left join department d on u.department_id=d.department_id;
    </select>
</mapper>

一对多,使用collection,1个user对应多个role:

<?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="employee_management.mapper.UserMapper">

    <!-- get user list only -->
    <resultMap type="employee_management.entity.User" id="userList">
        <id property="user_id" column="user_id" javaType="java.lang.Integer" />
        <result property="user_name" column="user_name" javaType="java.lang.String" />
        <result property="user_gender" column="user_gender" javaType="java.lang.String" />
        <result property="user_email" column="user_email" javaType="java.lang.String" />
        <result property="user_phone" column="user_phone" javaType="java.lang.String" />
        <result property="user_address" column="user_address" javaType="java.lang.String" />
        <result property="user_birthday" column="user_birthday"
            javaType="java.util.Date" />
        <result property="department_id" column="department_id"
            javaType="java.lang.Integer" />
    </resultMap>

    <!-- get user list with role -->
    <resultMap type="employee_management.entity.User" id="userRoleList"
        extends="userList">
        <!-- collection中不是javaType而是ofType,通过property也知道是list,即多个。
        extends属性,即在父resultMap的基础上再加上子resultMap的结果,在这里即再加上部门的信息。 -->
        <collection property="roles" ofType="employee_management.entity.Role">
            <id property="role_id" column="role_id" javaType="java.lang.Integer" />
            <result property="role_name" column="role_name" javaType="java.lang.String" />
        </collection>
    </resultMap>

    </resultMap>

<select id="getAll" resultMap="userList">
        select * from user
    </select>
<select id="getAllUserAndRole" resultMap="userRoleList">
        select u.*,r.* from
        user u left join user_role ur on u.user_id=ur.user_id
        left join role r
        on r.role_id=ur.role_id;
    </select>

猜你喜欢

转载自blog.csdn.net/RuiKe1400360107/article/details/81783010