Mybatis的延迟加载

定义:

延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作

Mybatis中的延迟加载

当代码执行到查询语句时候,并不是直接到DB中执行select查询语句,而是根据配置好的延迟策略,将查询延迟;来减轻DB服务器的压力;

Mybatis中使用规则:

  1. 只能对关联对象进行查询时使用延迟加载策略;对于主对象直接加载即可;
  2. 只能使用多表单独查询,不能使用多表连接查询(多表连接查询直接可以查询到全部信息)

Mybatis中延迟加载策略分为三种:

  1. 直接加载:执行到查询语句,马上到DB中去执行查询;
  2. 侵入式延迟加载:将关联对象详情侵入到主加载对象中,作为主加载对象的一部分,需要访问主加载对象时,关联对象也会被加载;
  3. 深入延迟加载:访问主加载对象,只会查询主表,不会查询关联表,用到关联对象时才到DB中查询;

配置

  1. 在Mybatis中可以在配置文件中进行配置:
<configuration>
    <!--在此标签下面-->
<settings>
    <!--延迟加载的总开关,默认是深度延迟加载-->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!--侵入式延迟加载的开关,在总开关打开时才起作用-->
    <!--<setting name="aggressiveLazyLoading" value="true"/>-->
</settings>
</configuration>
  1. 还可以在resultMap中关联关系中配置:

在association 和collection标签的属性中:

<association property="course"
             javaType="Course"
             fetchType="lazy"
             select="selectCourseById"
             column="courseId"/>

fetchType :数据加载方式,可选值为lazy 和eager ,分别为‘深度延迟加载’和’侵入式延迟加载加载‘,这个配置会覆盖全局的lazyLoadingEnabled 配置;

原文地址:https://www.cnblogs.com/gbetter/p/11827248.html

时间: 2025-01-22 03:13:36

Mybatis的延迟加载的相关文章

查询复杂对象用respsbody转换成json串时,mybatis的延迟加载报错的解决方法

在查询数据时,如果你查询的是复杂的对象需要通过respsbody转换成json串时,mybatis用的延迟加载会报以下错误: 解决方法:第一步在RequestMapping(参数中加入 produces =  "application/json")表示将功能处理方法将生产json格式的数据,此时根据请求头中的Accept进行匹配,如请求头"Accept:application/json"时即可匹配.第二步:在实体类中前面加上注解@JsonInclude(JsonIn

MyBatis学习--延迟加载

简介 在resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能.例如:我们查询订单并且关联查询用户信息.如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息.把对用户信息的按需去查询就是延迟加载. 延迟加载:先从单表查询.需要时再从关联表去关联查询,大大提高 数据库性能,因为查询单表要比关联查询多张表速度要快. association实现延迟加载 如果我们查询订单

七 mybatis的延迟加载

1       延迟加载 1.1     什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 需求: 如果查询订单并且关联查询用户信息.如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息.把对用户信息的按需去查询就是延迟加载. 延迟加载:先从单表查询.需要时再从关联表去关联查询,大大提高 数据库性能,因为查询单表要比关联查询多张表速度要快.

mybatis 配置延迟加载 和 缓存

<!-- MyBatis延迟加载时,创建代理类 --> <dependency> <groupId>cglib</groupId> <artifactId>cglib-nodep</artifactId> <version>3.1</version> </dependency> <settings> <!-- 设置延迟加载需要添加cglib --> <!-- 全局启用或

Mybatis(五) 延迟加载和缓存机制(一级二级缓存)

踏踏实实踏踏实实,开开心心,开心是一天不开心也是一天,路漫漫其修远兮. --WH 一.延迟加载 延迟加载就是懒加载,先去查询主表信息,如果用到从表的数据的话,再去查询从表的信息,也就是如果没用到从表的数据的话,就不查询从表的信息.所以这就是突出了懒这个特点.真是懒啊. Mybatis中resultMap可以实现延迟加载 1.1.查询订单信息,延迟加载用户信息,一对一关系. 1.1.1.开启延迟加载 全局配置文件中,settings标签用来设置全局常量的,这里就用到了. 1 <settings>

mybatis开启延迟加载

在mybatis核心配置文件中配置: lazyLoadingEnabled.aggressiveLazyLoading 设置项 描述 允许值 默认值 lazyLoadingEnabled 全局性设置懒加载.如果设为‘false’,则所有相关联的都会被初始化加载. true | false false aggressiveLazyLoading 当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载.否则,每个属性都按需加载. true | false true <settings>

Mybatis开启延迟加载的注意事项

启用延迟加载需要在配置文件中进行以下设置: <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="false"/> 说明: 当aggressiveLazyLoading属性设置为true时,会在包含延迟加载属性的对象第一次被调用会完全加载任意属性(不管该属性是否设置了延

MyBatis应用开发(16)延迟加载之概念

1.1.1. 延迟加载的概念 延迟加载是指在存在关联关系时,在加载主表数据时,仅仅加载主表数据到映射的Java Bean对象中,而不会立即将关联的子表数据加载到存在关联关系的从属Java Bean中.在访问到关联的Java Bean的有关方法时,才会加载子表到关联的从属Java Bean中. 使用嵌套查询时,MyBatis支持延迟加载功能. MyBatis提供了2种方式控制延迟加载与否. 方式一:在SqlMapConfig.xml文件中使用3个setting结点控制整个程序中的associati

Mybatis延迟加载

现在有这么一个需求,要查询所有的订单,并且获得该订单的详细信息. 如果一次性把所有需要的数据都请求到,那么对服务器和数据库的开销会很大,所以可以先加载订单信息,需要用到订单详情的时候再请求详情数据. 那么就要用到mybatis的延迟加载 开启延迟加载 在mybaits配置文件中添加设置 <!--延迟加载--> <setting name="lazyLoadingEnabled" value="true"/> <setting name=