Mybatis学习笔记---day03缓存

一:Mybatis的延时加载

1.一级缓存的介绍:

Mybatis中有一级缓存,一级缓存默认开启的,是sqlSession级别的缓存,例如:当查询用户订单和用户信息时,首先查出来的是三个订单,而三个订单分别属于两个用户,所以在查询出订单的时候,只需要再向数据库发送两条查询用户信息的sql即可,因为其中的两个订单是属于同一个用户的,这就是Mybatis'的一级缓存

2.通过查询用户信息及订单的例子证明一级缓存的存在
a、编写Mapper接口中的方法
	//查询所有订单,使用延时加载先不查询用户信息,当需要时再查询
	public List<Orders> selectOrdersNoUser();
b、编写Mapper.xml配置文件中的延时加载配置
	<!-- 根据用户id获取用户信息 -->
	<select id="selectUserById" parameterType="Integer" resultType="User">
		select *from user where id = #{id}
	</select>
	<!-- 手动映射, 获取所有订单信息 -->
	<resultMap type="Orders" id="ordersResultMap">
		<result column="id" property="id"/>
		<result column="user_id" property="userId"/>
		<result column="number" property="number"/>
		<result column="createtime" property="createtime"/>
		<result column="note" property="note"/>
		<!-- 一对一关系 
			以下是对用户信息进行延时加载的写法:
			select:调用之前根据Id获取用户信息方法的门牌号
			column:select中查询用户信息方法的入参
		-->
		<association property="user" javaType="User" select="selectUserById" column="user_id">
			<result column="id" property="id"/>
			<result column="username" property="username"/>
			<result column="sex" property="sex"/>
			<result column="birthday" property="birthday"/>
			<result column="address" property="address"/>
		</association>
	</resultMap>
	<!-- 查询所有订单信息的方法,延时加载用户信息 -->
	<select id="selectOrdersNoUser" resultMap="ordersResultMap">
		select order.* from Orders
	</select>
c、编写Junit测试类
	//获取所有订单信息,采用延时加载用户的方法
	@Test
	public void selectOrdersNoUser(){
		SqlSession sqlSession = sqlSessionFactory.openSession();
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		List<Orders> orders = userMapper.selectOrdersNoUser();
		System.out.println(orders);
	}
d、通过直接查询数据库证明订单及用户的关系

e、通过Debug分析数据库sql执行的条数

f、在sqlMapConfig.xml中的setting中配置延时加载开关
<configuration>
	<!-- 全局配置参数 -->
	<settings>
		<!-- 延时加载总开关 -->
		<setting name="lazyLoadingEnabled" value="true"/>
		<!-- 设置按需加载 -->
		<setting name="aggressiveLazyLoading" value="false"/>
	</settings>

二:Mybatis的二级缓存

1.Mybatis的二级缓存是sqlSessionFactory级别的缓存,使用步骤
a、在sqlMapConfig中配置setting群居变量
<configuration>
	<!-- 全局配置参数 -->
	<settings>
		<!-- 延时加载总开关 -->
		<setting name="lazyLoadingEnabled" value="true"/>
		<!-- 设置按需加载 -->
		<setting name="aggressiveLazyLoading" value="false"/>
	</settings>
b、在需要使用二级缓存的Mapper.xml文件中配置使用
<mapper namespace="com.mybatis.mapper.UserMapper">
	<!-- 开启本mapper的二级缓存 -->
	<cache/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值