使用mybatis编写利用collection集合标签完成一对多表的查询功能
时间: 2024-05-14 18:12:32 浏览: 68
假设有两个表:学生表(student)和课程表(course),一个学生可以选择多门课程,那么我们可以通过一对多查询,查询一个学生所选的所有课程。
首先,定义两个实体类:Student和Course。
Student类:
```java
public class Student {
private int id;
private String name;
private List<Course> courseList; //学生所选的课程列表
//getter和setter方法
}
```
Course类:
```java
public class Course {
private int id;
private String name;
private int studentId; //学生ID,与学生表关联
//getter和setter方法
}
```
然后,定义Mapper接口和Mapper.xml文件。
Mapper接口:
```java
public interface StudentMapper {
//查询所有学生及其所选的课程
List<Student> findAllStudents();
}
```
Mapper.xml文件:
```xml
<mapper namespace="com.example.mapper.StudentMapper">
<resultMap id="studentMap" type="com.example.entity.Student">
<id property="id" column="id"/>
<result property="name" column="name"/>
<!-- 使用collection标签查询一对多关系 -->
<collection property="courseList" ofType="com.example.entity.Course">
<id property="id" column="course_id"/>
<result property="name" column="course_name"/>
<result property="studentId" column="student_id"/>
</collection>
</resultMap>
<!-- 查询所有学生及其所选的课程 -->
<select id="findAllStudents" resultMap="studentMap">
SELECT s.id, s.name, c.id as course_id, c.name as course_name, c.student_id
FROM student s
LEFT JOIN course c ON s.id = c.student_id
</select>
</mapper>
```
最后,在Service层调用Mapper接口的方法,即可查询所有学生及其所选的课程。
```java
@Service
public class StudentService {
@Autowired
private StudentMapper studentMapper;
public List<Student> findAllStudents(){
return studentMapper.findAllStudents();
}
}
```
阅读全文