MyBatis详解(6)-- 分页及缓存

分页

方式1:使用limit来分页

方式2:使用Map集合来保存分页需要数据,来进行分页

方式3:使用RowBounds集合来保存分页需要数据,来进行分页

List<Student> list = stuMapper.findStuRowBounds(new RowBounds(2,3));

方式4:使用pageHelper插件

第一步:导包
在这里插入图片描述

第二步:引用插件

<!-- 引用插件 -->
	<plugins>
		<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
	</plugins>

第三步:在调用前使用PageHelper.startPage(页码,步长)

//startPage(页码,步长)
PageHelper.startPage(2,3);
List<Student> list = stuMapper.findStudentPageHelger();

缓存

缓存(cache),数据交换的缓冲区,当应用程序需要读取数据时,先从数据库中将数据取出,放置在缓冲区中,应用程序从缓冲区读取数据。

特点:

数据库取出的数据保存在内存中,具备快速读取和使用。

限制:

读取时无需再从数据库获取,数据可能不是最新的;

术语:

命中:需要的数据在缓存中找到结果。

未命中:需要的数据在缓存中未找到,重新获取。

加载分类
立即加载:

​ 不管用不用信息,只要调用,马上发起查询并进行加载

延迟加载:

​ 在真正使用数据时才发起查询,不用的时候不查询,按需加载(也叫 懒加载)

<!--  <settings>
	懒加载/延迟加载
	<setting name="lazyLoadingEnabled" value="true"/>
	层级加载
	<setting name="aggressiveLazyLoading" value="false"/>
	</settings>	 -->

如果设置 lazyLoadingEnabled = false,则禁用延迟加载,会级联加载所有关联对象的数据

如果设置 lazyLoadingEnabled = true,默认情况下mybatis 是按层级延时加载的。

aggressiveLazyLoading = true,mybatis 是按层级延时加载

aggressiveLazyLoading = false,mybatis 按需求加载。

mybatis缓存:

减少 Java Application 与数据库的交互次数,从而提升程序的运行效率;

缓存的适用性
  • 适合使用缓存:经常查询并且不经常改变的数据的正确与否对最终结果影响不大的

比如:一个公司的介绍,新闻等

  • 不适合用于缓存:经常改变的数据数据的正确与否对最终结果影响很大

比如:商品的库存,股市的牌价等

MyBatis 缓存分类
一级缓存

会话 session 级别的缓存,针对一次会话操作内;

默认开启,一级缓存只是相对同一个 SqlSession 对象而言。

注意:

当调用sqlsession的修改,添加,删除,commit(),close() 等方法是,就会清空一级缓存

<setting name="localCacheScope" value="SESSION"/>

在这里插入图片描述

一级缓存未命中

在这里插入图片描述

二级缓存

映射器级别的缓存,针对不同Namespace 的映射器;

配置步骤:(xml)
1.在mybatis的sqlMapConfig.xml 中配置

在这里插入图片描述

2.在mybatis的sqlmap中配置(mapper.xml中配置)

在这里插入图片描述

3.在使用的操作中配置(在select标签中配置)

在这里插入图片描述

配置步骤:(注解)
1.在mybatis的sqlMapConfig.xml 中配置

在这里插入图片描述

2.在接口的定义上面直接使用@CacheNamespace 并将blocking设置为true,二级缓存就可以使用了

在这里插入图片描述

二级缓存的优劣
  • Mybatis 的二级缓存相对于一级缓存来说,实现了缓存数据的共享,可控性也更强;

  • 极大可能会出现错误数据,有设计上的缺陷,安全使用的条件比较苛刻;

  • 分布式环境下,必然会出现读取到错误数据,所以不推荐使用

自定义缓存

根据各类不同的缓存机制,自定义缓存的实现方式。

  • 实现 org. apache. ibatis. cache. Cache 接口自定义缓存;

  • 引入 Redis 等第三方内存库作为 MyBatis 缓存

  • 40
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值