懒加载(Lazy Loading) - MyBatis懒加载 - Spring懒加载

Dear 丶 2022-12-10 15:53 502阅读 0赞

文章目录

    • 懒加载(Lazy Loading)
      • MyBatis中懒加载的使用
      • Spring中懒加载的使用

懒加载(Lazy Loading)

  懒加载也叫“延迟价值”,核心思想是把对象的实例化延迟到真正调用该对象的时候,这样做的好处是可以减轻大量对象在实例化时对资源的消耗,而不是在程序初始化的时候就预先将对象实例化。另外“懒加载”可以将对象的实例化代码从初始化方法中独立出来,从而提高代码的可读性,以便于代码能够更好地组织。
  特别是在web应用程序中,它能够在用户滚动页面的时候自动获取更多的数据,而新得到的数据不会影响原有数据的显示,同时最大程度上减少服务器端的资源耗用。(购买商品往下滑动才加载,一次只加载一部分,如果继续需要,再加载)【懒加载提高了系统响应时间,提升了系统性能】 - - [适用于单表查询提高效率,但是多表关联查询效率可能降低]

MyBatis中懒加载的使用

  1. MyBatis中使用懒加载需要核心配置文件中的configuration下的settings中配置以下两行










  2. 在使用的时候(在映射文件XxxMapper.xml中使用),通过在所需要懒加载的resultMap 的列上加上 fetchType="lazy" ,表明这个数据是懒加载实现的。









  1. <resultMap id="orderMap" type="com.xgf.mybatis.correlation.many_to_many.bean.Order">
  2. <id column="oid" property="id"/>
  3. <result property="description" column="description"/>
  4. <!-- fetchType="lazy" 懒加载实现数据加载-->
  5. <collection property="productList" fetchType="lazy" ofType="com.xgf.mybatis.correlation.many_to_many.bean.Product">
  6. <id column="pid" property="id"/>
  7. <result property="name" column="name"/>
  8. </collection>
  9. </resultMap>

Spring中懒加载的使用

  在Spring中,默认情况下在容器被初始化的过程中,就会去解析xml和注解,将其创建为单例的bean并存到一个map集合中。如果需要创建的bean很多,spring在启动的过程中就需要花费大量的时间去解析xml和注解来创建bean ,并花费大量的空间去存储bean,以供使用,但是在很多情况下,大部分的bean可能很久都使用不上, 所以Spring提供了懒加载机制。Spring的懒加载机制让bean不在启动容器的时候就创建,而是在第一次使用时才创建,减轻在启动容器过程中对时间的浪费和内存的消耗。
  懒加载机制只对单例bean起作用,多例bean是在使用的时候才会由容器创建,所以对于多例bean设置懒加载是没有意义的。

spring的懒加载配置方式有两种:

  • 注解配置懒加载(@Lazy)
  • xml中配置懒加载
  1. 注解配置懒加载(@Lazy)
      就是在类/成员变量/方法上加@Lazy注解,表示这个类/成员变量/方法是懒加载的,在容器启动的时候不会初始化为bean,只有在使用到的时候,才会创建。

    //懒加载 — 类上
    @Lazy
    public class User {

    1. private Integer id;
    2. private String username;
    3. private String password;
    4. //懒加载 -- 方法上
    5. //@Lazy
    6. public User(){
    7. System.out.println("初始化User的bean");
    8. }

    }

  1. xml配置懒加载
      xml文件里面,通过配置 lazy-init="true"来启用懒加载。
    2.1 配置全局懒加载(直接在核心配置文件的beans头里面加入default-lazy-init="true")

    <?xml version=”1.0” encoding=”UTF-8”?>



2.2 配置局部懒加载(在bean里面加入lazy-init="true")

  1. <bean id="User" class="com.xgf.bean.User" lazy-init="true"></bean>

如果同时设定全局懒加载和局部懒加载(bean的懒加载机制),且配置不相同的时候,则bean局部配置会覆盖全局配置。

发表评论

表情:
评论列表 (有 0 条评论,502人围观)

还没有评论,来说两句吧...

相关阅读

    相关

    为什么要使用懒加载? 当我们进入到某个页面的时候,会有很多的图片,有些图片可能在下面,当我们点进页面但没有滑动全部展示时,其实下面的图片是没有啥作用的,白加载了,还降低网

    相关 mybatis

    mybatis提供了懒加载机制, 需要使用resultMap才能使用懒加载机制(resultType不支持懒加载) 全局配置文件: <settings>