mybatis中association和collection标签的分步执行和懒加载

association和collection是mybatis sql映射文件中封装结果集的两个标签

association标签

1、简单级联封装Bean

类似于一个员工对应一个部门的pojo封装

public class Employee {
    private Integer id;
    private String lastName;
    private char gender;
    private String email;
    private String did;
    //部门Bean
    private Department dept;
...

我们在映射文件中封装结果集时怎么封装dept这个属性呢?显然使用resultType不能直接将结果集封装到dept,所以我们使用resultMap来进行结果集重新封装。


        
        
        
        
        
        
        
            
            
        
    

一步查询


2、association 分步查询思路
-- 先查出所有的员工信息
SELECT * FROM  t_employee WHERE id=#{id}
-- 再根据查出来的员工信息中的部门id查询对应的部门信息
SELECT * FROM  t_dept WHERE id=#{id}

使用association进行分步执行


        
        
        
        
        
        
        
            
            
            
        
    

collection标签

1、简单级联封装Bena中集合(List,Map)属性
public class Department {
    private Integer id;
    private String deptname;
//集合属性
    private List emps;//部门里面有很多的员工一对多
...
}

使用collection标签一步执行


        
        
        
        
            
            
            
            
        
    

关联查询

 
2、collection标签进行多步执行思路
-- 先查出所有的部门信息
SELECT * FROM t_dept  WHERE id=#{id}
-- 再根据查出来的对应部门信息中的部门id查询对应的员工信息
SELECT * FROM  t_employee  WHERE id=#{id}

使用collection标签进行多步执行

 
        
        
        
            
            
            
            
            
        
  
    

懒加载操作

在我们进行多步执行的时候,我们会执行两次sql操作,如果我们每次执行都执行两次会消耗资源,所以在我们需要进行第二步执行sql的时候再去执行就减少了资源的浪费。懒加载应运而生。
1、第一种
我们需要在mybatis-config.xml中配置settings标签,这样我们就开启了懒加载操作


        
        
        
        

2、第二种
collection标签中我们可以设置fetchType参数来进行懒加载的控制
fetchType="lazy":表示使用延迟加载; fetchType="eager ":表示使用立即加载;

你可能感兴趣的:(mybatis中association和collection标签的分步执行和懒加载)