mybaits一对多关联查询
时间: 2023-12-16 14:23:59 浏览: 88
mybatis关联查询问题(一对多、多对一)
5星 · 资源好评率100%
mybatis是一种流行的Java持久层框架,可以对数据库进行操作。在mybatis中,实现一对多关联查询可以使用两种方式:嵌套查询和嵌套结果映射。嵌套查询是指在主查询中执行子查询来获取关联对象的数据,而嵌套结果映射是指在主查询的结果映射中包含关联对象的映射。
对于嵌套查询,可以使用select标签在主查询中执行子查询。例如,假设有一个班级和学生的关联关系,可以使用如下的SQL语句进行一对多关联查询:
```
<select id="getBanjiWithStudents" resultType="Banji">
SELECT *
FROM Banji
WHERE id = #{id}
</select>
<select id="getStudentsByBanjiId" resultType="Student">
SELECT *
FROM Student
WHERE banji_id = #{id}
</select>
```
然后,在Mapper接口中定义对应的方法:
```
public interface BanjiMapper {
Banji getBanjiWithStudents(int id);
}
```
在配置文件中进行映射:
```
<mapper namespace="com.example.BanjiMapper">
<select id="getBanjiWithStudents" resultType="Banji">
SELECT *
FROM Banji
WHERE id = #{id}
</select>
<select id="getStudentsByBanjiId" resultType="Student">
SELECT *
FROM Student
WHERE banji_id = #{id}
</select>
</mapper>
```
然后可以通过调用`getBanjiWithStudents`方法来进行一对多关联查询。
对于嵌套结果映射,可以使用association和collection标签来进行配置。例如:
```
<resultMap id="banjiResultMap" type="Banji">
<id property="id" column="id"/>
<result property="name" column="name"/>
<collection property="students" ofType="Student">
<id property="id" column="student_id"/>
<result property="name" column="student_name"/>
</collection>
</resultMap>
```
然后,在Mapper接口中定义对应的方法:
```
public interface BanjiMapper {
Banji getBanjiWithStudents(int id);
}
```
在配置文件中进行映射:
```
<mapper namespace="com.example.BanjiMapper">
<resultMap id="banjiResultMap" type="Banji">
<id property="id" column="id"/>
<result property="name" column="name"/>
<collection property="students" ofType="Student">
<id property="id" column="student_id"/>
<result property="name" column="student_name"/>
</collection>
</resultMap>
<select id="getBanjiWithStudents" resultMap="banjiResultMap">
SELECT b.id, b.name, s.id as student_id, s.name as student_name
FROM Banji b
LEFT JOIN Student s ON b.id = s.banji_id
WHERE b.id = #{id}
</select>
</mapper>
```
同样可以通过调用`getBanjiWithStudents`方法来进行一对多关联查询。
阅读全文