MyBatis 的一对多映射分为几种?

MyBatis 用于一对多映射主要有两种方式:

  1. 使用集合属性
    一个父类拥有子类的集合属性,在映射时直接映射到集合即可:
<!-- 对象 -->    
public class Parent {    
   private List<Child> children;  
}

public class Child {    
   // ..
}

<!-- 映射 -->
<resultMap id="parentResult" type="Parent">
   <collection property="children" 
      ofType="Child">
       ...  // Child 结果集映射
   </collection>
</resultMap>
  1. 使用association
    直接使用association标签映射:
<association property="child" javaType="Child">
   ...   // Child 结果集映射
</association>

或通过 select 查询:

<association property="child" 
     column="id" 
     javaType="Child"
     select="selectChild"/>

则需要对应的selectChild方法查询Child:

<select id="selectChild" resultType="Child">
   ...
</select>  

这两种方式的不同点是:

  • collection 方式会返回一个子类对象的集合。
  • association 方式只返回一个子类对象。

两种方式都可以完成一对多的映射,选择方式需视实际需求而定。