多对多SQL的mapper
时间: 2024-02-23 07:01:37 浏览: 112
以下是一个基于 MyBatis 的多对多 SQL Mapper 的示例:
假设有两个表:Student(学生)和 Course(课程),一个学生可以选修多个课程,一个课程可以被多个学生选修。在 Student 表中,有一个 studentId 字段作为主键,在 Course 表中,有一个 courseId 字段作为主键。两个表之间使用一个中间表 StudentCourse(学生课程关系表)来维护多对多关系,其中有一个 studentId 字段和一个 courseId 字段。
在 StudentMapper.xml 文件中,可以配置多对多关系的 SQL Mapper 如下:
```xml
<!-- 根据学生 ID 查询选修的课程 -->
<select id="getCoursesByStudentId" resultMap="courseResultMap">
SELECT Course.*
FROM Course
INNER JOIN StudentCourse ON Course.courseId = StudentCourse.courseId
WHERE StudentCourse.studentId = #{studentId}
</select>
<!-- 根据课程 ID 查询选修该课程的学生 -->
<select id="getStudentsByCourseId" resultMap="studentResultMap">
SELECT Student.*
FROM Student
INNER JOIN StudentCourse ON Student.studentId = StudentCourse.studentId
WHERE StudentCourse.courseId = #{courseId}
</select>
<!-- 在 StudentCourse 表中插入一条记录 -->
<insert id="insertStudentCourse" parameterType="map">
INSERT INTO StudentCourse(studentId, courseId)
VALUES(#{studentId}, #{courseId})
</insert>
<!-- 在 StudentCourse 表中删除一条记录 -->
<delete id="deleteStudentCourse" parameterType="map">
DELETE FROM StudentCourse
WHERE studentId = #{studentId} AND courseId = #{courseId}
</delete>
```
在 Student 类中,需要定义一个 List<Course> 类型的属性 courses,并提供 getter 和 setter 方法。在 Course 类中,需要定义一个 List<Student> 类型的属性 students,并提供 getter 和 setter 方法。在 StudentMapper 接口中,需要定义如下方法:
```java
public interface StudentMapper {
List<Course> getCoursesByStudentId(int studentId);
List<Student> getStudentsByCourseId(int courseId);
void insertStudentCourse(int studentId, int courseId);
void deleteStudentCourse(int studentId, int courseId);
}
```
这样,就可以在 Java 代码中方便地使用 MyBatis 来处理多对多关系了。
阅读全文