mybatis侵略延迟和深度延迟加载的区别
时间: 2024-05-19 17:07:20 浏览: 14
mybatis是一种基于Java的持久层框架,它提供了两种不同的延迟加载方式:侵入式延迟加载和深度延迟加载。
1. 侵入式延迟加载
侵入式延迟加载是指在查询时只加载主对象,而不加载关联对象。当需要访问关联对象时,再去查询数据库并加载关联对象。这种方式需要在Mapper.xml文件中手动配置延迟加载,即在需要延迟加载的关联对象上添加lazyLoadingEnabled=true属性。
示例代码:
```xml
<resultMap id="userMap" type="User">
<id property="id" column="id"/>
<result property="username" column="username"/>
<collection property="orders" ofType="Order" select="findOrdersByUserId" lazyLoadingEnabled="true"/>
</resultMap>
```
2. 深度延迟加载
深度延迟加载是指在查询时只加载主对象和一级关联对象,而不加载其他级别的关联对象。当需要访问其他级别的关联对象时,再去查询数据库并加载关联对象。这种方式需要在Mapper.xml文件中手动配置延迟加载,即在需要延迟加载的关联对象上添加fetchType="lazy"属性。
示例代码:
```xml
<resultMap id="userMap" type="User">
<id property="id" column="id"/>
<result property="username" column="username"/>
<collection property="orders" ofType="Order" select="findOrdersByUserId" fetchType="lazy"/>
</resultMap>
```