Spring Boot設(shè)置并使用緩存的步驟
幾個(gè)緩存注解的作用:
@Cacheable:將方法的返回結(jié)果根據(jù)key指定的鍵保存在緩存中,以后要獲取相同的數(shù)據(jù)直接從緩存中共獲取
- cacheNames/value:指定Cache組件名稱
- key:指定緩存時(shí)使用的key,默認(rèn)使用方法參數(shù)值,可以使用#a0、#p0、#參數(shù)名等,支持SpEL表達(dá)式,root可省略
- keyGenerator:指定key的生成器的組件id,如自定義的KeyGenerator
- cacheManager:指定緩存管理器
- cacheResolver:指定緩存解析器
- condition:指定在哪種條件下緩存,如condition = “#id>=1”在參數(shù)>=1時(shí)緩存
- unless:指定該條件為真時(shí)不緩存
- sync:指定是否使用異步模式
@CachePut:不管緩存中是否有需要的數(shù)據(jù),都會(huì)執(zhí)行該注解標(biāo)注的方法,并將結(jié)果更新到緩存,屬性見上
@CacheEvit:執(zhí)行方法后,清除key指定的緩存
- allEntries:默認(rèn)為false,值為true,刪除所有緩存
- beforeInvocation:默認(rèn)為false,值為true,在方法調(diào)用之前清除緩存
@CacheConfig:定義一些通用或公共的規(guī)則,如cacheNames、keyGenerator等
可使用的SpEL表達(dá)式:
使用緩存的步驟:
(1)創(chuàng)建一個(gè)Spring Boot應(yīng)用,勾選Cache、Web、MySQL、Mybatis模塊,在主程序類上添加注解,開啟基于注解的緩存
@MapperScan(basePackages = "com.youngpain.cache.mapper") @SpringBootApplication @EnableCaching
(2)創(chuàng)建JavaBean,和數(shù)據(jù)庫中的表對(duì)應(yīng),并配置數(shù)據(jù)源
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)創(chuàng)建mapper接口進(jìn)行增刪改查操作
/** * 部門表的增刪改查操作 */ 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)創(chuàng)建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)創(chuàng)建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)測試結(jié)果:
@Cacheable:第一次查詢數(shù)據(jù),控制臺(tái)發(fā)出sql語句,之后再查詢直接從緩存中獲取
@CachePut:調(diào)用方法修改某個(gè)數(shù)據(jù)后,再次查詢?cè)摂?shù)據(jù)是從緩存中獲取的更新后的數(shù)據(jù)
@CacheEvict:調(diào)用該方法后,再次查詢某個(gè)數(shù)據(jù)需要重新發(fā)出sql語句查詢
ps:之前只是用markdown記筆記,今天第一次用markdown寫文章,寫起來好舒服啊QAQ
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
java面向?qū)ο缶幊讨匾拍罾^承和多態(tài)示例解析
這篇文章主要為大家介紹了java面向?qū)ο缶幊痰膬蓚€(gè)重要概念繼承和多態(tài)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05基于springboot的RestTemplate、okhttp和HttpClient對(duì)比分析
這篇文章主要介紹了基于springboot的RestTemplate、okhttp和HttpClient對(duì)比分析,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09spring boot實(shí)現(xiàn)過濾器和攔截器demo
本篇文章主要介紹了spring boot實(shí)現(xiàn)過濾器和攔截器demo ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02java中List刪除時(shí)需要的注意事項(xiàng)
最近在利用java中的LIST在刪除時(shí)發(fā)現(xiàn)了一個(gè)錯(cuò)我,通過查找相關(guān)的資料終于解決了,覺著有必要分享處理給同樣遇到這個(gè)問題的朋友參考,下面這篇文章主要介紹了java中List刪除時(shí)需要的注意事項(xiàng),需要的朋友可以一起來看看吧。2017-01-01java.math.BigDecimal的用法及加減乘除計(jì)算
這篇文章主要介紹了java.math.BigDecimal的用法及加減乘除計(jì)算,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05使用java swing實(shí)現(xiàn)qq登錄界面示例分享
這篇文章主要介紹了使用java swing實(shí)現(xiàn)qq登錄界面示例,需要的朋友可以參考下2014-04-04基于Java中的StringTokenizer類詳解(推薦)
下面小編就為大家?guī)硪黄贘ava中的StringTokenizer類詳解(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05Springboot?Filter中注入bean無效為null問題
這篇文章主要介紹了Springboot?Filter中注入bean無效為null問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05