MyBtis-缓存

本文介绍了缓存概念,它介于应用程序和数据存储源之间,可提高应用性能。阐述了缓存作用是减少访问数据库次数,分类有一级、二级、三级缓存。重点讲解MyBatis的一级、二级缓存,一级基于SqlSession,二级基于SqlSessionFactory,还给出二级缓存使用Ehcache的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.缓存概念:

缓存是计算机领域非常通用的概念。它介于应用程序和永久性数据存储数据源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能,缓存中的数据是数据存储源中数据的拷贝,应用程序在运行时直接读写缓存中的数据,只在某些特定时刻按照缓存中的数据来同步更新数据存储源。 缓存的物理介质通常是内存,而永久性数据存储源的物理介质通常是硬盘或磁盘,应用程序读写内在的速度显然比读写硬盘的速度快,如果缓存中存放的数据量非常大也会用硬盘作为缓存的物理介质。缓存的实现不仅需要作为物理介质的硬件,同时还需要用于管理缓存的并发访问和过期等策略的软件。
因此缓存是通过软件和硬件共同实现的

2.缓存作用:

是用来减少访问数据源(数据库)次数

3.缓存分类:

  • 一级缓存:事务
  • 二级缓存:进程
  • 三级缓存:集群

在这里插入图片描述
MyBatis支持1级缓存和2级缓存,在实际开发中,实际上很少使用到MyBatis自带的缓存,大部分情况下,缓存都是使用EHCache,MemoryCache、Redis等等来实现缓存。

4.MyBtis中的一级缓存:

MyBatis中1级缓存是基于SqlSession的

	@Test
	public void query2() throws IOException {
		SqlSession session = DbUtils.getInstace().openSession();
		//通过Java动态代理自动提供了UserMapper的实现类
		EmpMapper mapper = session.getMapper(EmpMapper.class);
		// 第一次查询,从数据库中查询的数据会保存在一级缓存中
		// key:
		List<Emp> list = mapper.query();
		for (Emp emp : list) {
			System.out.println(emp.getId()+","+emp.getName());
		}
		System.out.println("----------");
		// 先查看缓存中是否有该数据,如果没有就从数据库中查询
		Emp emp = mapper.queryById(1);
		System.out.println(emp.getId()+","+emp.getName());
		
		System.out.println("----------");
		// 之前查询的有,直接从缓存中获取
		emp = mapper.queryById(1);
		System.out.println(emp.getId()+","+emp.getName());
		session.close();
	}

在这里插入图片描述
跟踪源码发现,缓存的key是由id 属性及sql语句组成的,所以第一个查询和第二个查询不同,没有使用缓存。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.MyBtis中的二级缓存:

二级缓存基于SqlSessionFactory,一级缓存的作用域只是SqlSession,范围比较下,用到的不多。二级缓存是进程基本的缓存,用的比较普遍,二级缓存MyBatis本身没有提供,常用的主键有Ehcache和Redis,本文主要讲解Ehcache

5.1 使用步骤

①导包
<dependency>
	<groupId>net.sf.ehcache</groupId>
	<artifactId>ehcache</artifactId>
	<version>1.5.0</version>
</dependency>

<dependency>
	<groupId>org.mybatis.caches</groupId>
	<artifactId>mybatis-ehcache</artifactId>
	<version>1.1.0</version>
</dependency>

②开启二级缓存
<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>

在这里插入图片描述

③ 测试:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值