(2)给定两个表,,基于mybatis框架实现连接查询(1对1或1对多),写mapper配置文件(resultmap和select),mapper接口
时间: 2024-02-04 13:02:23 浏览: 22
假设有两个表:学生表(student)和课程表(course),其中一个学生可能选修多门课程,一个课程也可能被多个学生选修。
1. 建立实体类
首先需要建立学生和课程的实体类,以及对应的属性和getter/setter方法。
学生实体类:
```
public class Student {
private int id;
private String name;
private List<Course> courses; // 一个学生可能选修多门课程,使用List存储
// getter/setter方法
}
```
课程实体类:
```
public class Course {
private int id;
private String name;
private int teacherId;
// getter/setter方法
}
```
2. 编写mapper配置文件
在mapper配置文件中,需要定义两个select语句,一个用于查询所有学生信息,另一个用于查询某个学生选修的所有课程信息。
在查询学生信息时,需要使用左连接(LEFT JOIN)查询学生和课程表,同时需要使用resultMap指定Student对象的属性和Course对象的属性之间的映射关系。
在查询某个学生选修的所有课程信息时,需要使用内连接(INNER JOIN)查询学生和课程表,同时需要使用resultMap指定Course对象的属性和学生表中的id属性之间的映射关系,并且在where条件中限定学生id为指定值。
具体的mapper配置文件如下:
```
<mapper namespace="com.example.mapper.StudentMapper">
<!-- 查询所有学生信息 -->
<select id="selectAllStudents" resultMap="studentResultMap">
SELECT s.id, s.name, c.id as course_id, c.name as course_name, c.teacher_id
FROM student s LEFT JOIN student_course sc ON s.id = sc.student_id
LEFT JOIN course c ON sc.course_id = c.id
</select>
<!-- 查询某个学生选修的所有课程信息 -->
<select id="selectCoursesByStudentId" resultMap="courseResultMap">
SELECT c.id, c.name, c.teacher_id
FROM student s INNER JOIN student_course sc ON s.id = sc.student_id
INNER JOIN course c ON sc.course_id = c.id
WHERE s.id = #{studentId}
</select>
<!-- 定义resultMap -->
<resultMap id="studentResultMap" type="com.example.entity.Student">
<id property="id" column="id"/>
<result property="name" column="name"/>
<collection property="courses" ofType="com.example.entity.Course" resultMap="courseResultMap"/>
</resultMap>
<resultMap id="courseResultMap" type="com.example.entity.Course">
<id property="id" column="course_id"/>
<result property="name" column="course_name"/>
<result property="teacherId" column="teacher_id"/>
</resultMap>
</mapper>
```
3. 编写mapper接口
在mapper接口中,需要定义两个方法,分别对应mapper配置文件中的两个select语句。
```
public interface StudentMapper {
// 查询所有学生信息
List<Student> selectAllStudents();
// 查询某个学生选修的所有课程信息
List<Course> selectCoursesByStudentId(int studentId);
}
```
这样就完成了基于mybatis框架实现连接查询的全部步骤。