mybatis中多对一和一对多映射、延迟加载


处理多对一映射关系

  • 方式一:使用级联方式
    
        
        
        
        
        
        
        
        
    

    
  • 方式二:使用association处理映射
    
        
        
        
        
        
        
        
            
            
        
    

    
  • 方式三:分步查询

employeeMapper.xml

    
    
        
        
        
        
        
        
    
    

departmentMapper.xml


    
    


处理一对多映射关系

public class Dept {
    private Integer did;
    private String deptName;
    private List emps;
    //...构造器、get、set方法等
}
  • 方式一:使用collection
    • collection:用来处理一对多的映射关系
    • ofType:表示该属性对饮的集合中存储的数据的类型
    
        
        
        
            
            
            
            
            
        
    

    
    
  • 方式二:使用分步查询

departmentMapper.xml

    
        
        
        
    

    

EmployeeMapper.xml

    

延迟加载

  • 分步查询的优点:可以实现延迟加载,但是必须在核心配置文件中设置全局配置信息:
  • lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载
  • aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。 否则,每个属性会按需加载
  • 此时就可以实现按需加载,获取的数据是什么,就只会执行相应的sql。此时可通过association和collection中的fetchType属性设置当前的分步查询是否使用延迟加载,
    fetchType="lazy(延迟加载)|eager(立即加载)"