在MyBatis中,一對多關系可以通過兩種方法進行數據添加:
使用嵌套查詢: 首先,在映射文件中定義兩個相應的查詢語句,一個查詢主表數據,一個查詢從表數據。然后,在主表的查詢語句中使用嵌套查詢從表的查詢語句,通過主表的主鍵與從表的外鍵建立關聯。最后,在業務邏輯中調用主表的查詢語句,MyBatis會自動執行嵌套查詢并將結果映射為嵌套對象。
示例代碼如下:
<!-- 主表查詢語句 -->
<select id="getMainTableData" resultMap="MainTableResultMap">
SELECT *
FROM main_table
</select>
<!-- 從表查詢語句 -->
<select id="getSubTableData" resultMap="SubTableResultMap">
SELECT *
FROM sub_table
WHERE main_table_id = #{id}
</select>
<!-- 主表映射 -->
<resultMap id="MainTableResultMap" type="MainTable">
<!-- 主表字段映射 -->
</resultMap>
<!-- 從表映射 -->
<resultMap id="SubTableResultMap" type="SubTable">
<!-- 從表字段映射 -->
</resultMap>
在業務邏輯中調用查詢語句:
MainTable mainTable = sqlSession.selectOne("getMainTableData", id);
MyBatis會自動執行嵌套查詢并將結果映射為嵌套對象。
使用association和collection標簽: 另一種方法是使用MyBatis的association和collection標簽。在映射文件中,使用association標簽定義主表和從表的關聯關系,并使用collection標簽定義從表的集合。然后,在業務邏輯中調用主表的查詢語句,MyBatis會自動執行關聯查詢并將結果映射為關聯對象。
示例代碼如下:
<!-- 主表查詢語句 -->
<select id="getMainTableData" resultMap="MainTableResultMap">
SELECT *
FROM main_table
</select>
<!-- 主表映射 -->
<resultMap id="MainTableResultMap" type="MainTable">
<!-- 主表字段映射 -->
<association property="subTable" resultMap="SubTableResultMap"/>
</resultMap>
<!-- 從表映射 -->
<resultMap id="SubTableResultMap" type="SubTable">
<!-- 從表字段映射 -->
</resultMap>
在業務邏輯中調用查詢語句:
MainTable mainTable = sqlSession.selectOne("getMainTableData", id);
MyBatis會自動執行關聯查詢并將結果映射為關聯對象。