Mybatis学习(14)查询缓存之内置二级缓存

前言

mybatis查询缓存的作用域是根据映射文件mapper的namespace划分的,相同namespace的mapper查询数据存放在同一个缓存区域中。不同namespace下的数据互不干扰。无论是一级缓存还是二级缓存都是按照namespace进行分别存放的。

但是一级、二级缓存的不同之处在于,SqlSession一旦关闭,则SqlSession中的数据将不存在,但是二级缓存的生命周期会与整个应用同步,与SqlSession是否关闭无关。

mybatis使用玩二级缓存的目的不是为了共享数据(这一点和hibernate不同),而是为了延长该查询结果的保存时间,提高系统的性能。

一、二级缓存的用法

1、实体序列化

要求查询结果涉及到的实体类都要序列化。如果该类具有父属性或者是具有域属性,那么相应的类也要实现序列化、

public class Student  implements Serializable{
	private Integer id;
	private String name;
	private int age;
	private double score;
    //get和set方法
    //toString方法
}

2、在mapper映射中添加<cache/>标签

3、二级缓存的配置

此时为cache标签增加一些相关属性设置。

  • eviction:逐出策略。当二级缓存中的对象达到最大值时候,就需要通过逐出策略将缓存中的对象移除缓存。默认是LRU。
  • flushInterval:刷新缓存的时间间隔,单位是毫秒。这里的刷新缓存就是清除缓存。
  • readOnly:设置缓存是否可读。
  • size:二级缓存中可以存放的对象的个数。默认是1024个。

二、二级缓存的存在性证明

1、修改测试类

//根据id号选出学生
	@Test
	public void testselectStudentById() {
		//第一次查询
		sqlSession = MybatisUtil.getSqlSession();
		dao = sqlSession.getMapper(IStudentDao.class);
		Student student = dao.selectStudentById(24);	
		System.out.println(student);
		
		//关闭SqlSession
		sqlSession.close();
	
		//第二次查询
		sqlSession = MybatisUtil.getSqlSession();
		dao = sqlSession.getMapper(IStudentDao.class);
		Student student2 = dao.selectStudentById(24);	
		System.out.println(student2);
		
	}

2、查看结果

可以看到,每执行一次就会计算一次命中率。第一次没有命中,为0,第二次命中了一次为0.5,第三次命中了两次为1/3

三、增删改对二级缓存的影响

增删改操作,无论是否进行提交sqlSession.commit(),均会清除一级缓存和二级缓存。

1、修改测试类

//根据id号选出学生
	@Test
	public void testselectStudentById() {
		//第一次查询
		sqlSession = MybatisUtil.getSqlSession();
		dao = sqlSession.getMapper(IStudentDao.class);
		Student student = dao.selectStudentById(24);	
		System.out.println(student);
		
		//关闭SqlSession
		sqlSession.close();
		
		//增加一个删除操作
		sqlSession = MybatisUtil.getSqlSession();
		dao = sqlSession.getMapper(IStudentDao.class);
		dao.deleteStuById(37);
	
		//第二次查询
		sqlSession = MybatisUtil.getSqlSession();
		dao = sqlSession.getMapper(IStudentDao.class);
		Student student2 = dao.selectStudentById(24);	
		System.out.println(student2);
		
	}

2、查看结果

3、设置增删改操作不刷新二级缓存

如果要是某个增删改操作不清空二级缓存,则需要再起标签添加属性

4、关闭二级缓存

(1)全局关闭

(2)局部关闭

 

四、二级缓存的使用原则

1、只能在一个命名空间下使用二级缓存

由于二级缓存中的数据是基于namespace的,也就是不同的namespace中的数据互不干扰。如果我们在多个namespace中使用了二级缓存,那么在多个namespace中若存在对同一张表的操作,那么这多个namespace中的数据可能就会出现不一致的现象。

2、在单表上使用二级缓存

原因如上

3、查询操作比较多的时候使用二级缓存

这是因为任何增删改操作都将刷新二级缓存,对二级缓存的频繁刷新会降低系统的性能。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值