MyBatis延迟加载&缓存&分页&逆向工程


延迟加载

概述

延迟加载本身是依赖于多表查询的

  • 延迟加载中返回值要选择resultMap
  • 返回的结果一定是Dto

延迟加载也可以成为按需加载;默认是没有开启的

步骤

  1. 在config.xml中配置下面代码
<!-- lazyLoadingEnabled:延迟加载全局开关,开启后所有关联对象
		都会延迟加载;默认是false
		aggressiveLazyLoading:按需加载;
		开启时,任一方法的调用都会加载该对象的所有延迟加载属性,因此设置为false;
		设置为false表示的意思就是按需加载;mybatis版本3.4以上默认是false
	 -->
   <setting name="lazyLoadingEnabled" value="true"/>
   <setting name="aggressiveLazyLoading" value="false"/>

使用的时候需要将lazyLoadingEnabled设置为true,将aggressiveLazyLoading设置为false

  1. 在mapper.xml中书写下面代码
	<!-- 一对多 -->
		<select id="selectOrderAndDetails" resultMap="map1" >
			select * from b_order
		</select>
		<resultMap type="BOrderDto" id="map1" extends="BaseMap">
			<!-- 延迟加载和多表查询(高级映射)的区别:
				在标签(collection或者association)中,添加column属性和select属性;
				select属性中:里面的内容写的是:namespace.sqlID;
					    表示的是:用来封装当前collection或者association的返回结果
					    	也就是select属性值中的sqlid查询出来的应该是和ofType同等类型;
				column属性指的是:第一步查询结果中的列名——》用作参数传入到select调用的sqlId中;
			 -->
			<collection property="details" ofType="BOrderDetailDto" column="id" select="selectDetails">
								
			</collection>
		</resultMap>
		<!-- 按需加载,如果还需要查看订单详情信息,则调用该方法: -->
		<select id="selectDetails" resultMap="map2">
			select  id detail_id, goods_id, main_id, price, num
			from b_order_detail where main_id = #{id}
		</select>
		<resultMap type="BOrderDetailDto" id="map2">
			<id column="detail_id" property="id"></id>
			<result column="goods_id" property="goodsId"/>
			<result column="main_id" property="mainId"/>
			<result column="price" property="price"/>
			<result column="num" property="num"/>
		</resultMap>

缓存

mybatis为减轻数据库压力,提高数据库性能。提供了两级缓存机制:
mybatis框架中包含了一级缓存和二级缓存

一级缓存

介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Zeal

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值