MyBatis 实现一对一关联查询通常有以下几种方式:
1. 嵌套结果映射(Nested Result Maps):
这种方式通过定义多个结果映射,让 MyBatis 在执行查询时,自动将多个结果集映射到对象的嵌套属性中。
示例:
<!-- 定义主实体的映射 -->
<resultMap id="mainResultMap" type="MainEntity">
<id property="id" column="main_id"/>
<result property="name" column="main_name"/>
<!-- 嵌套查询结果映射 -->
<association property="subEntity" javaType="SubEntity">
<id property="id" column="sub_id"/>
<result property="info" column="sub_info"/>
</association>
</resultMap>
<!-- SQL 查询语句 -->
<select id="selectMainWithSub" resultMap="mainResultMap">
SELECT main.id as main_id, main.name as main_name,
sub.id as sub_id, sub.info as sub_info
FROM main_table main
LEFT JOIN sub_table sub ON main.id = sub.main_id
</select>
2. 嵌套查询(Nested Queries):
这种方式通过在主查询中嵌套子查询,实现一对一关联查询,将子查询的结果作为主查询结果的一部分返回。
示例
<select id="selectMainWithSub" resultType="MainEntity">
SELECT main.id as id, main.name as name,
(SELECT sub.info FROM sub_table sub WHERE sub.main_id = main.id) as subInfo
FROM main_table main
</select>
3. 关联查询(Join Queries):
直接使用 SQL 的联接查询,在查询语句中使用 JOIN
或 LEFT JOIN
连接两个表,并通过 SELECT
返回关联结果。
示例:
<select id="selectMainWithSub" resultMap="mainResultMap">
SELECT main.id as main_id, main.name as main_name,
sub.id as sub_id, sub.info as sub_info
FROM main_table main
LEFT JOIN sub_table sub ON main.id = sub.main_id
</select>
以上示例是一对一关联查询的简单实现方式。选择合适的方式取决于实际情况,包括数据库设计、性能需求、数据量等因素。 MyBatis 通过这些灵活的方式能够满足不同场景下一对一关联查询的需求。