Mybatis many-to-many annotation query

Learn mybatis many-to-many annotations and record them for future query.
Here the many-to-many relationship uses student and course. A student can choose multiple courses, and a course can be selected by multiple students. The intermediate table is stu_cou.
Student.java

public class Student {
    private int id;
    private String name;
    private Classes classes;
    private List<Course> courseList;
    //getter and setter
    }

Course.java

public class Course {
    private int id;
    private String name;
    private int credit;
    private List<Student> studentList;
    //getter and setter
    }

StudentMapper.java, add a select statement to query student by courseId:

    @Select("select * from student where id in(select stu_id from stu_cou where cou_id=#{courseId})")
    @Results({
        @Result(id=true,property="id",column="id"),
        @Result(property="name",column="name"),
        @Result(property="classes",column="classes_id",javaType=Classes.class,
        one=@One(select="com.lsj.test.mybatis.annotation.mapper.ClassesMapper.selectClasses",fetchType=FetchType.LAZY)),
        @Result(property="courseList",column="id",many=@Many(select="com.lsj.test.mybatis.annotation.mapper.CourseMapper.selectCourseByStudent",fetchType=FetchType.LAZY))
    })
    public List<Student> selectStudentByCourse(int courseId);

Add a select statement to query Course by student ID in CourseMapper.java

    @Select("select * from course where id in(select cou_id from stu_cou where stu_id=#{studentId})")
    @Results({
        @Result(id=true,property="id",column="id"),
        @Result(property="name",column="name"),
        @Result(property="credit",column="credit"),
        @Result(property="studentList",column="id",
        many=@Many(select="com.lsj.test.mybatis.annotation.mapper.StudentMapper.selectStudentByCourse",fetchType=FetchType.LAZY))
        })
    public List<Course> selectCourseByStudent(int studentId);

Then add many to Result in the select statement in StudentMapper.java , pointing to the select statement in CourseMapper that queries Course by student ID. Similarly, CourseMapper also points to StudentMapper in the same way.

    @Select("select * from student where id=#{id}")
    @Results({
        @Result(id=true,property="id",column="id"),
        @Result(property="name",column="name"),
        @Result(property="classes",column="classes_id",javaType=Classes.class,
        one=@One(select="com.lsj.test.mybatis.annotation.mapper.ClassesMapper.selectClasses")),
//这里添加many,指向CourseMapper中的selectCourseByStudent查询语句
        @Result(property="courseList",column="id",many=@Many(select="com.lsj.test.mybatis.annotation.mapper.CourseMapper.selectCourseByStudent",fetchType=FetchType.LAZY))
    })
    public Student selectStudent(int id);

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325636503&siteId=291194637