MyBatis的一對多和多對一關系的配置需要使用兩個標簽:<collection>
和<association>
。
一對多關系的配置步驟如下:
<collection>
標簽配置一對多關系。在<collection>
標簽中,指定property
屬性為一的一方的集合屬性,ofType
屬性為多的一方的實體類,select
屬性為查詢多的一方數據的SQL語句。<collection>
標簽的select
屬性的值作為子查詢,并將查詢結果映射到一的一方的集合屬性中。多對一關系的配置步驟如下:
<association>
標簽配置多對一關系。在<association>
標簽中,指定property
屬性為多的一方的實體對象屬性,javaType
屬性為一的一方的實體類,column
屬性為多的一方的外鍵列名。<association>
標簽的select
屬性的值作為子查詢,并將查詢結果映射到多的一方的實體對象屬性中。配置示例:
一對多關系配置示例:
<resultMap id="userMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<collection property="orders" ofType="Order" select="getOrdersByUserId" column="id"/>
</resultMap>
<select id="getUserById" parameterType="int" resultMap="userMap">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="getOrdersByUserId" parameterType="int" resultMap="orderMap">
SELECT * FROM orders WHERE user_id = #{userId}
</select>
多對一關系配置示例:
<resultMap id="orderMap" type="Order">
<id property="id" column="id"/>
<result property="name" column="name"/>
<association property="user" javaType="User" column="user_id" select="getUserById"/>
</resultMap>
<select id="getOrderById" parameterType="int" resultMap="orderMap">
SELECT * FROM orders WHERE id = #{id}
</select>
<select id="getUserById" parameterType="int" resultMap="userMap">
SELECT * FROM user WHERE id = #{id}
</select>
這些示例假設存在兩個表:user
和orders
,其中orders
表中的外鍵列為user_id
。