MyBatis 缓存概念及延迟加载

一、MyBatis缓存

1.1 概念

在客户进行查询操作时,往往可能对重复的查询执行很多次,mybatis提供了默认的缓存机制一级缓存、二级缓存其中一级缓存默认开启,二级缓存需要进行配置才能进行使用,将查询的结果放置至对应的缓存,在用户重复查询时可以直接获取上一次的结果(在没有进行修改的情况下)

1.2 一级缓存

在mybatis核心配置文件中设置相应的配置开启缓存默认会直接开启一级缓存,将查询的数据缓存至当前的sqlsession会话中,当对同一sql语句进行多次查询时,除第一次进行查询外,其余直接获取当前缓存中的数据(没有被修改的前提下)

<settings>
	<setting name="cacheEnabled" value="true"/>
</settings>

mybatis为了提高用户的查询效率,会将一级缓存存储在客户连接的sqlsession中。同一个sqlsession默认会使用同一个查询的结果

1.3 二级缓存

由于二级缓存是所有的sqlsession都可以访问,如果将所有的查询结果都保存可能造成数据的溢出,所以mybaits提供了2种共同实行的解决方案,首先需要对开启二级缓存的mapper进行设置,并且提供可以与第三方存储联合的方法,将缓存存储至像是radis这样的内存服务器中(默认存储在服务器中)

开启二级缓存只需要在对应mapper中书写cache标签(无属性)

    <!--开启二级缓存 默认存储在当前系统内存中-->
    <cache/>

注意:二级缓存会将结果存储在内存中,所以需要存储数据实现序列化接口,并且只有在当前的sqlsession使用结束,才会将一级缓存数据推送至二级缓存

二、MyBatis延迟加载

2.1 概念

在进行查询时只将核心数据进行查询(不将所有数据全部查询),而是在达到指定触发条件时自动调用查询返回结果。

常用于多个表之间的对应关系

2.2 书写

使用的是resultMap 集合映射与类映射的三个属性

select:指向其他mapper的查询语法是namespace.id

column:调用其他查询时需要传入的参数(使用已有查询结果列进行使用)

fetchType: 设置延迟加载样式

lazy深入式 :只有使用到对应属性时才进行查询(根据需要使用的属性进行查询)

eager侵入式:无延迟加载直接执行将数据查询

<resultMap id="user" type="com.yunhe.vo.User">
   <association property="role"  column="uid" select="com.yunhe.mapper.RoleMapper.selectByUid" fetchType="lazy"/>
</resultMap>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Main12138

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

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

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

打赏作者

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

抵扣说明:

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

余额充值