多表查询mybatis 一对多
时间: 2023-11-09 19:00:53 浏览: 118
在MyBatis中进行一对多的多表查询可以使用嵌套查询或者使用resultMap来实现。以下是两种方法的示例:
1. 嵌套查询:
在Mapper XML文件中定义两个查询语句,一个查询主表的信息,一个查询从表的信息。然后在主查询中使用嵌套查询来获取从表的数据。
```xml
<!-- 查询主表数据 -->
<select id="getMainTableData" resultMap="MainTableResultMap">
SELECT * FROM main_table
</select>
<!-- 查询从表数据 -->
<select id="getSubTableData" resultMap="SubTableResultMap">
SELECT * FROM sub_table WHERE main_table_id = #{mainTableId}
</select>
```
然后在Java代码中调用嵌套查询:
```java
MainTable mainTable = sqlSession.selectOne("getMainTableData");
List<SubTable> subTableList = sqlSession.selectList("getSubTableData", mainTable.getId());
mainTable.setSubTableList(subTableList);
```
2. 使用resultMap:
在Mapper XML文件中定义一个resultMap,通过association和collection标签来关联主表和从表。
```xml
<resultMap id="MainTableResultMap" type="MainTable">
<!-- 主表字段映射 -->
<id property="id" column="id" />
<result property="name" column="name" />
<!-- 从表字段映射 -->
<collection property="subTableList" ofType="SubTable">
<id property="id" column="id" />
<result property="name" column="name" />
</collection>
</resultMap>
<select id="getMainTableData" resultMap="MainTableResultMap">
SELECT * FROM main_table
</select>
```
然后在Java代码中直接调用查询:
```java
MainTable mainTable = sqlSession.selectOne("getMainTableData");
```
阅读全文