博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis 之 延迟加载(Lazy Load)
阅读量:6997 次
发布时间:2019-06-27

本文共 1256 字,大约阅读时间需要 4 分钟。

hot3.png

1. LazyLoad 的作用:

    在数据与对象进行 mapping 操作时,只有在真正使用到 该对象时,才进行 mapping 操作,以减少数据库查询开销,从而提升系统性能

    但是Lazy Load也有缺点,在 按需加载时会多次连接数据库,同时会增加数据库的压力。所以在实际使用时,会衡量是否使用 延迟加载。

2. 实现:

    1)在 sqlMapConfig.xml 文件中配置 Lazy Load 的开关。

    2)在 sqlMapper.xml 映射文件中中配置sql映射,这里是一对一查询<association>,也可用在 <collection>中

  
  
  
  
  
  
  
    
  select * from users where userId = #{user_id}  
  select * from orders

    3)定义 mapper 接口,并调用接口方法

//延迟加载	@Test	public void testFindOrderAndUser_lazyLoad() throws Exception {		//获取SqlSession		SqlSession sqlSession = sqlSessionFactory.openSession();		//指定 mapper 接口的类型,MyBatis通过动态代理的方式实现mapper接口		OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);				List
 list = orderMapper.findOrderAndUser_lazyLoad(); System.out.println(list.size()); //Iterator
 iterator = list.iterator(); //while (iterator.hasNext()) { //Order order = (Order) iterator.next(); //System.out.println(order.getUser()); //} }

    执行结果:

152431_6Mhk_1757476.png

    如果去掉上面代码注释的部分,那么就调用了getUser()的方法,mybatis 会自动调用 findUserById() 去获取 User信息。结果如下:

152555_TcSW_1757476.png

如果关闭了 Lazy Load,那么结果是这样的:

154835_5Z7n_1757476.png

转载于:https://my.oschina.net/u/1757476/blog/507597

你可能感兴趣的文章