Mybatis笔记2--resultMap处理一对多,多对一关系

resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。

结果映射(resultMap)--主要使用这两个标签

  • association – 一个复杂类型的关联;许多结果将包装成这种类型
    • 嵌套结果映射 – 关联可以是 resultMap 元素,或是对其它结果映射的引用
  • collection – 一个复杂类型的集合
    • 嵌套结果映射 – 集合可以是 resultMap 元素,或是对其它结果映射的引用

数据库:

Mybatis笔记2--resultMap处理一对多,多对一关系_第1张图片

对于一对一或多对一的关系,使用association 来表示一个复杂类型的关联,如:

多个学生对应一个老师

@Data
public class Student {
    private int id;
    private String name;
    private Teacher teacher;
}
@Data
public class Teacher {
    private int id;
    private String name;
}

 

学生中有一个老师的对象(teacher)------      一(一个学生)中有一(一个老师对象)

StudentMapper 接口中创建方法

public interface StudentMapper {
    //多对一处理---子查询方式
    List getStudentList1();
    //多对一处理---结果集映射
    List getStudentList2();
}

Mapper配置文件

两种实现方式:

1、子查询方式,sql语句简单,但是配置属性较多







    




最后的column标签是以键值对的形式传参的

column="{key=value,key=value}"

当 column中的值只有一个时,即column="tid",在引用处名字不那么重要,因为他直接就把值取走了,并需要对比key,

所以 select * from teacher where id = #{tid},这里的tid写成id或者123,都能取到值。

2、结果集嵌套,sql相对复杂,但是配置属性没那么多




    

    
    

        
        
    

一对多的处理只能使用collection ---一个复杂类型的集合

同样是学生与老师,站在老师的角度,一个老师有很多学生,所以实体类变成了这样

@Data
public class Student {
    private int id;
    private String name;
    private int tid;
}
@Data
public class Teacher {
    private int id;
    private String name;
    private List students;
}

TeacherMapper 接口变成了这样

public interface TeacherMapper {
    //子查询方式
    List getTeacher1(@Param("tid")int tid);
    //结果集映射
    List getTeacher2(@Param("tid")int tid);
}

Mapper配置文件

方式一:


    
    
    
        
        







    

方式二:清爽





    
    
    


        
        
    

 


感谢狂神说java

https://mp.weixin.qq.com/s/Dpt0LHTgx0kL7RCk8PZ2aw

 

 

 

 

你可能感兴趣的:(Mybatis笔记2--resultMap处理一对多,多对一关系)