Spring Boot设置并使用缓存的步骤

网友投稿 317 2023-01-11


Spring Boot设置并使用缓存的步骤

几个缓存注解的作用:

@Cacheable:将方法的返回结果根据key指定的键保存在缓存中,以后要获取相同的数据直接从缓存中共获取

cacheNames/value:指定Cache组件名称

key:指定缓存时使用的key,默认使用方法参数值,可以使用#a0、#p0、#参数名等,支持SpEhttp://L表达式,root可省略

keyGenerator:指定key的生成器的组件id,如自定义的KeyGenerator

cacheManager:指定缓存管理器

cacheResolver:指定缓存解析器

condition:指定在哪种条件下缓存,如condition = “#id>=1”在参数>=1时缓存

unless:指定该条件为真时不缓存

sync:指定是否使用异步模式

@CachePut:不管缓存中是否有需要的数据,都会执行该注解标注的方法,并将结果更新到缓存,属性见上

@CacheEvit:执行方法后,清除key指定的缓存

allEntries:默认为false,值为true,删除所有缓存

beforeInvocation:默认为false,值为true,在方法调用之前清除缓存

@CacheConfig:定义一些通用或公共的规则,如cacheNames、keyGenerator等

可使用的SpEL表达式:

使用缓存的步骤:

(1)创建一个Spring Boot应用,勾选Cache、Web、mysql、Mybatis模块,在主程序类上添加注解,开启基于注解的缓存

@MapperScan(basePackages = "com.youngpain.cache.mapper")

@SpringBootApplication

@EnableCaching

(2)创建javaBean,和数据库中的表对应,并配置数据源

spring:

datasource:

url: jdbc:mysql://localhost:3306/mybatis_database

username: root

password: 1741248769

driver-class-name: com.mysql.jdbc.Driver

redis:

host: 39.108.114.57

#开启驼峰命名法

mybatis:

configuration:

map-underscore-to-camel-case: true

logging:

level:

com.youngpain.cache.mapper: debug

(3)创建mapper接口进行增删改查操作

/**

* 部门表的增删改查操作

*/

public interface DepartmentMapper {

@Insert("insert into department(id,depart_name,depart_build) values(#{id},#{depart_name},#{depart_build})")

void insertDepartment(Department department);

@Delete("delete from department where id=#{id}")

void deleteDepartment(Integer id);

@Update("update department set depart_name=#{departName},depart_build=#{departBuild} where id=#{id}")

void updateDepartment(Department department);

@Select("select * from department where id=#{id}")

Department getDepartmentById(Integer id);

}

(4)创建service

@Service

@CacheConfig(cacheNames = {"departs"})

public class DepartmentService {

@Autowired

DepartmentMapper departmentMapper;

@Cacheable(key = "#a0.id")

public void insertDepartment(Department department) {

departmentMapper.insertDepartment(department);

}

@CacheEvict(key = "#p0")

public void deleteDepartment(Integer id) {

departmentMapper.deleteDepartment(id);

}

@CachePut(key = "#a0.id")

public Department updateDepartment(Department department) {

departmentMapper.updateDepartment(department);

return department;

}

@Cacheable(key = "#id", condition = "#p0>=1")

public Department getDepartmentById(Integer id) {

return departmentMapper.getDepartmentById(id);

}

}

(5)创建controller

@Controller

public class DepartmentController {

@Autowired

DepartmentService departmentService;

@GetMapping("/index")

public String index() {

return "index";

}

@GetMapping("/deleteDepart/{id}")

public String deleteDepart(@PathVariable("id") Integer id, Model model) {

model.addAttribute("condition", "delete");

Department delete = departmentService.getDepartmentById(id);

model.addAttribute("department", delete);

departmentService.deleteDepartment(id);

return "success";

}

@PostMapping("/updateDepart")

public String updateDepart(Department department, Model model) {

model.addAttribute("condition", "update");

Department update = departmentService.updateDepartment(department);

model.addAttribute("department", update);

return "success";

}

@GetMapping("/getDepart/{id}")

public String getDepartmentById(@PathVariable("id") Integer id, Model model) {

model.addAttribute("condition", "delete");

Department get = departmentService.getDepartmentById(id);

model.addAttribute("department", get);

return "success";

}

}

(6)测试结果:

@Cacheable:第一次查询数据,控制台发出sql语句,之后再查询直接从缓存中获取

@CachePut:调用方法修改某个数据后,再次查询该数据是从缓存中获取的更新后的数据

@CacheEvict:调用该方法后,再次查询某个数据需要重新发出sql语句查询

ps:之前只是用markdown记笔记,今天第一次用markdown写文章,写起来好舒服啊QAQ

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:桌面应用接口测试(软件接口测试实战详解)
下一篇:Java位掩码控制权限与(&)或(|)非(~)、>的介绍
相关文章

 发表评论

暂时没有评论,来抢沙发吧~