mybatis中的延迟加载和立即加载(maven工程)

一 需要用到的表

1. 用户表user

mybatis中的延迟加载和立即加载(maven工程)_第1张图片

2. 账户表account

问题:在一对多中,当我们有一个用户,它有100个账户。
          在查询用户的时候,要不要把关联的账户查出来?
          在查询账户的时候,要不要把关联的用户查出来?
          实际开发中:
          在查询用户时,用户下的账户信息应该是,什么时候使用,什么时候查询的。
          在查询账户时,账户的所属用户信息应该是随着账户查询时一起查询出来。

什么是延迟加载
        在真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载)
什么是立即加载
        不管用不用,只要一调用方法,马上发起查询。

在对应的四种表关系中:一对多,多对一,一对一,多对多
        一对多,多对多:通常情况下我们都是采用延迟加载。
        多对一,一对一:通常情况下我们都是采用立即加载。

二 mybatis的加载方式

需求一:查询用户的信息,在查询用户信息时还要把该用户名下的账户信息查出来

1. 方案一

使用join的方式,进行多表查询,这种方式的话肯定是立即加载的,因为我们查了两个表了

2. 方案二

使用延迟加载的方式,如果不使用用户的account信息,就不加载,什么时候使用,什么时候加载。实现方式如下:

1)在SqlMapConfig.xml中配置settings信息,设置延迟加载

SqlMapConfig.xml和不设置延迟加载的区别就在于设置settings,不复杂




    
    

    
    
        
        
    


    
    
        
    
    
    
    
        
        
            
            

            
            
                
                
                
                
            
        
    
    
    
        
    

2)配置UserMapper.xml

在这里一定要注意resultMap的写法,collection标签内部不再需要配置对象关系映射信息,但是需要给collection加一个select属性,select属性中写的是AccountMapper.xml中的findById的全路径

还有一点需要注意的是:collection标签中必须要写column属性,com.itheima.dao.IAccountDao.findById对应的Statement要用





    
    
        
        
        
        
        
        
        
    

    
    

    

需求二:查询账户的信息,在查询账户信息时还要把该账户的用户信息查出来(和需求一是相似的)

1. 方案一

使用join的方式,进行多表查询,这种方式的话肯定是立即加载的,因为我们查了两个表了

2. 方案二

使用延迟加载的方式,如果不使用account的用户信息,就不加载,什么时候使用,什么时候加载。实现方式如下:

1)在SqlMapConfig.xml中配置settings信息,设置延迟加载(和需求一中一样)

2)2)配置AccountMapper.xml





    
    
        
        
        
        
        
        
    

    
    

    

 

 

 

你可能感兴趣的:(mybatis)