在MyBatis中,一對多映射可以通過以下幾種方式實現:
<!-- 父實體對象 -->
<resultMap id="parentResultMap" type="Parent">
<id property="id" column="id" />
<result property="name" column="name" />
<!-- 子實體對象集合 -->
<collection property="children" ofType="Child">
<id property="id" column="child_id" />
<result property="name" column="child_name" />
</collection>
</resultMap>
<!-- 查詢語句 -->
<select id="getParents" resultMap="parentResultMap">
SELECT p.id, p.name, c.id AS child_id, c.name AS child_name
FROM parent_table p
LEFT JOIN child_table c ON p.id = c.parent_id
</select>
<!-- 父實體對象 -->
<resultMap id="parentResultMap" type="Parent">
<id property="id" column="id" />
<result property="name" column="name" />
<!-- 子實體對象 -->
<association property="child" javaType="Child">
<id property="id" column="child_id" />
<result property="name" column="child_name" />
</association>
</resultMap>
<!-- 查詢語句 -->
<select id="getParents" resultMap="parentResultMap">
SELECT p.id, p.name, c.id AS child_id, c.name AS child_name
FROM parent_table p
LEFT JOIN child_table c ON p.id = c.parent_id
</select>
<!-- 父實體對象 -->
<resultMap id="parentResultMap" type="Parent">
<id property="id" column="id" />
<result property="name" column="name" />
<!-- 子實體對象 -->
<association property="child" javaType="Child" select="getChildsByParentId" />
</resultMap>
<!-- 子實體對象的查詢語句 -->
<select id="getChildsByParentId" resultType="Child">
SELECT id, name
FROM child_table
WHERE parent_id = #{id}
</select>
<!-- 查詢語句 -->
<select id="getParents" resultMap="parentResultMap">
SELECT id, name
FROM parent_table
</select>
其中,getChildsByParentId是一個獨立的查詢語句,用于獲取子實體對象的數據。而嵌套選擇標簽中的select屬性則指定了要執行的查詢語句。
以上是幾種常見的一對多映射實現方式,根據具體的業務需求和數據結構,可以選擇適合的方式來實現。