Mybatis one-to-many association annotation

I recently learned mybatis and recorded a one-to-many association annotation.
Here we use one-to-many association between Classes and Students, and the configuration is as follows:
Classes.java

public class Classes {
    public int id;
    public String name;
    public List<Student> studentList;
    //getter/setter
    }

Student.java

public class Student {
    private int id;
    private String name;
    private Classes classes;
    //getter/setter
    }

ClassesMapper.java

public interface ClassesMapper {

    @Insert("insert into classes (name) values (#{name})")
    @Options(useGeneratedKeys=true,keyProperty="id")
    public void insertClasses(Classes classes);

    @Select("select * from classes where id=#{id}")
    @Results({
        @Result(id=true,property="id",column="id"),
        @Result(property="name",column="name"),
        @Result(property="studentList",column="id",javaType=List.class,
        many=@Many(select="com.lsj.test.mybatis.annotation.mapper.StudentMapper.selectStudentByClass"))
    })
    public Classes selectClasses(int id);

    @Delete("delete from classes where id=#{id}")
    public void deleteClasses(int id);

}

StudentMapper.java

public interface StudentMapper {

    @Insert("insert into student (name,classes_id) values(#{name},#{classes.id})")
    @Options(useGeneratedKeys=true,keyProperty="id")
    public void insertStudent(Student student);

    @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"))
    })
    public Student selectStudent(int id);

    @Select("select * from student where classes_id=#{classId}")
    @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"))
    })
    public List<Student> selectStudentByClass(int classId);

    @Delete("delete from student where id=#{id}")
    public void deleteStudent(int id);
}

Here in StudentMapper, Student contains classes object, which is multi-terminal, through

        @Result(property="classes",column="classes_id",javaType=Classes.class,
        one=@One(select="com.lsj.test.mybatis.annotation.mapper.ClassesMapper.selectClasses")

Associate students with classes, so that when querying students, according to classes_id, classes can be added to the query and added to the students

When querying studentList in ClassesMapper, the select statement that queries Student by class ID in StudentMapper is referenced

@Result(property="studentList",column="id",javaType=List.class,
        many=@Many(select="com.lsj.test.mybatis.annotation.mapper.StudentMapper.selectStudentByClass")

The many statement needs to define a select statement in StudentMapper to check students according to the class id. The column in the many of the above Result must be the id of the class table, and the class id is passed to the select statement as a parameter.

Guess you like

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