mybatis多对一处理【案例】

  •  多个学生,对应一个老师
  • 但是对于学生这边而言,关联,也就是多个学生关联一个老师【多对一】
  • 对于老师而言,集合,一个老师教很多学生【一对多】

创建实体类

@Data
public class Student {
    private int id;
    private String name;
    //学生关联一个老师
    private Teacher teacher;
}
@Data
public class Teacher {
    private int id;
    private String name;
}

创建接口

public interface StudentMapper {
    //查询所有学生信息,以及对应的老师信息
    List<Student> SelectAllStudent();
}
public interface TeacherMapper {
    @Select( "select * from teacher where id = #{id}" )
    Teacher SelectByIdTeacher(@Param( "id" ) int id);
}

 绑定mapper接口

    <mappers>
        <mapper resource="com/RXJ/mapper/StudentMapper.xml"/>
        <mapper resource="com/RXJ/mapper/TeacherMapper.xml"/>
    </mappers>

 按照查询嵌套处理

    <!--    复杂的属性我们需要单独处理   对象:association    集合:collection-->
  <select id="SelectAllStudent" resultMap="StudentAndTeacher">
        select * from student
    </select>
    <resultMap id="StudentAndTeacher" type="Student">
        <result property="id" column="id"/>
        <result property="name" column="name"/>
        <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
    </resultMap>
    <select id="getTeacher" resultType="Teacher">
        select * from teacher where id=#{id}
    </select>

 按照结果嵌套处理

    <select id="SelectAllStudent" resultMap="StudentAndTeacher">
        select s.id sid,s.name sname,t.name tname
        from student s,teacher t
        where s.tid = t.id
    </select>
    <resultMap id="StudentAndTeacher" type="Student">
        <result property="id" column="sid"/>
        <result property="name" column="sname"/>
        <association property="teacher" javaType="Teacher">
            <result property="name" column="tname"/>
        </association>
    </resultMap>

 测试

    @Test
    public void testStudent(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentMapper mapper = sqlSession.getMapper( StudentMapper.class );
        List<Student> students = mapper.SelectAllStudent();
        for(Student student:students){
            System.out.println(student);
        }
        sqlSession.close();
    }

猜你喜欢

转载自blog.csdn.net/qq_52146944/article/details/129941118