长春网站建设 找源晟,厦门定制型网站建设,研发项目管理软件,小红书推广方案分步查询——懒加载模式
目录
懒加载模式示例不使用懒加载使用懒加载aggressiveLazyLoadinglazyLoadTriggerMethods所谓懒加载#xff0c;也称延时加载#xff0c;是指不一下子加载完全部资源。需要用到哪些资源才去加载这些资源#xff0c;用不到的资源#xff0c;就不去…分步查询——懒加载模式
目录
懒加载模式示例不使用懒加载使用懒加载aggressiveLazyLoadinglazyLoadTriggerMethods所谓懒加载也称延时加载是指不一下子加载完全部资源。需要用到哪些资源才去加载这些资源用不到的资源就不去加载他以达到节约资源优化的目的。分步查询中存在懒加载现象。
懒加载模式示例 不使用懒加载
首先看一下不使用懒加载的情况下是如何运行的。 我们执行的代码不涉及到 customer 的资源但是如果不适用懒加载它依旧会加载。
public void test2(){SqlSession sqlSession MybatisUtils.openSession();OrderMapper mapper sqlSession.getMapper(OrderMapper.class);Order order mapper.getOrderWithId(2); // 不需要加载 customer 的资源sqlSession.close();
}运行效果可见分步查询中即使我们没有用到 customer 的资源它依旧执行了语句加载了资源。
使用懒加载
如果我们开启懒加载会怎么样呢在 MyBatis 配置文件中如下配置
settings!--配置sql打印--setting namelogImpl valueSTDOUT_LOGGING/!--延迟加载的全局开关。当开启时所有关联对象都会延迟加载。--setting namelazyLoadingEnabled valuetrue/
/settings再去执行上面那段代码可见分步查询中我们没有用到 customer 的资源则它根本没有去执行 customer 的查询语句在大项目中是十分节约资源的。
只有当我们用到了 customer 的资源它才会去加载如下
public void test2(){SqlSession sqlSession MybatisUtils.openSession();OrderMapper mapper sqlSession.getMapper(OrderMapper.class);Order order mapper.getOrderWithId(2); // 实现分步查询System.out.println(order.getCustomer().getCust_name()); // 需要加载 customer 的资源sqlSession.close();
}aggressiveLazyLoading !--当开启时任何方法的调用都会加载该对象的所有属性。否则每个属性会按需加载--
setting nameaggressiveLazyLoading valuefalse/这个设置在 3.4.1 之前都是默认为 true我们需要手动设置为 false。(新版中已经默认为 false)
lazyLoadTriggerMethods 默认 toString() 方法是不触发延迟加载的只要涉及到 toString() 方法就会加载全部的资源。这个设置可以指定 toString() 及一些方法触发延迟加载。
!--指定哪个对象的方法触发一次延迟加载。--
setting namelazyLoadTriggerMethods valueequals,clone,hashCode/