mybatis延迟加载(先加载orders信息,延迟加载user信息)

本文介绍MyBatis中如何通过配置lazyLoadingEnabled和aggressiveLazyLoading来实现延迟加载,以减少数据库压力。以订单查询为例,展示了如何仅在需要时加载关联的用户信息,包括配置statement语句和使用association标签。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要查询关联信息时,使用mybatis延迟加载特性可有效的减少数据库压力,首次查询只查询主要信息,关联信息等用户获取时再加载。

  1. 打开延迟加载开关

在mybatis核心配置文件中配置:lazyLoadingEnabled、aggressiveLazyLoading

设置项

描述

允许值

默认值

lazyLoadingEnabled

全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载。

true | false

false

aggressiveLazyLoading

当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。

true | false

true

<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>

 

 

一对一查询延迟加载

需求:查询订单信息,关联查询用户信息。默认只查询订单信息,当需要查询用户信息时再去查询用户信息。

sql语句:SELECT orders.* FROM orders  

<select id="findOrdersList3" resultMap="userordermap2">
	SELECT
	orders.*
	FROM
	orders
</select>

在Mapper.xml配置statement语句,用于查询订单表

orders表中有user_id外键,可以利用该外键关联查询user表的用户信息

 

<select id="findUserById" parameterType="java.lang.Integer" resultType="cn.itcast.mybatis.po.User">
		SELECT * FROM user WHERE id = #{id}
	</select>	

 在Mapper.xml配置查询用户statement语句

<!-- 订单信息resultmap -->
<resultMap type="cn.itcast.mybatis.po.Orders" id="userordermap2">
<id property="id" column="id"/>
<result property="user_id" column="user_id"/>
<result property="number" column="number"/>
<association property="user" javaType="cn.itcast.mybatis.po.User" select="findUserById" column="user_id"/>
</resultMap>

association

select="findUserById":指定关联查询sql为findUserById

column="user_id":关联查询时将users_id列的值传入findUserById

最后将关联查询结果映射至cn.itcast.mybatis.po.User

 

public List<Orders> findOrdersList3() throws Exception;

Dao接口类方法

 

总结:

延迟加载思想:先进行一次单表查询,而且该表必须含有延迟加载表的外键

当延迟加载关联表时,在Mapper.xml中配置statement语句,配置select和colum属性

 

延迟加载有三个条件

1.必须是resultMap输出映射

2.必须是collection标签(即类中有List<T>属性)

3.必须是association标签(即类中有包装pojo类属性)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值