cache内容
缓存的意义:将方法的运行结果进行缓存,以后再要相同的数据,直接从缓存中获取,不用调用方法;
cacheManager管理多个Cache组件,对缓存的真正操作CRUD操作在Cache组件中,每一个缓存组件有自己唯一一个名字;
几个属性:
-
cacheNames/value:指定缓存的名字;
-
key:缓存数据使用的key:可以用它来指定。默认是使用方法参数的值 1-方法的返回值
编写SpEL: #id:参数id的值 #a0 #p0 #root.args[0] -
keyGenerator: key的生成器;可以自己指定key的生成器的组件id
-
cacheManager:指定缓存管理器;或者cacheResolver指定缓存解析器
-
condition:指定符合条件的情况下缓存;condition = “#id>1"
-
unless:否定缓存;当unless指定的条件为true,方法的返回值就不会缓存,可以获取到结果进行判断; unless = “#result = null”
@Cacheable(cacheNames = {
"emp"},key="root.id")
public Employee getEmpById(Integer id){
System.out.println("查询"+id+"号员工");
Employee employee = employeeMapper.getEmpById(id);
return employee;
}
@CachePut:
// @CachePut:既调用方法,又更新缓存数据;同步更新缓存
// 修改了数据库的某个数据,同时更新缓存
// 运行:
// 1.先调用目标方法
// 2.将目标方法的结果缓存起来
@CachePut(key= "#result.id")
public Employee updateEmp(Employee employee){
System.out.println("updateEmp"+employee);
employeeMapper.updateEmpById(employee);
return employee;
}
@CacheEvict
// @CacheEvict:缓存清除
// key:指定要清除的数据
// allEntries = true:指定清除这个缓存中的所有数据
// beforeInvocation=true 代表清除缓存操作是在方法运行之前执行,无论方法是否出现异常,缓存都清除
@CacheEvict
public void deleteEmp(Integer id){
System.out.println("deleteEmp:"+id);
int i = 101/0;
employeeMapper.deleteEmpById(id);
}
搭建基本环境
- 导入数据文件 创建出department和employee表
- 创建Javabean封装数据
- 整合MyBatis操作数据库 配置数据源信息
使用步骤
- 导入模块
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
- 在主函数中开启缓存模式 @EnableCaching
@EnableCaching
@SpringBoot