动手试一试 Spring Boot默认缓存管理

1.准备数据

使用之前创建的springbootdata的数据库,该数据库有两个表t_article和t_comment,这两个表预先插入几条测试数据。

2.编写数据库表对应的实体类

java 复制代码
@Entity(name = "t_comment")
public class Comment {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String content;
    private String author;

    @Column(name = "a_id")
    private Integer aId;

    //补充get set toString

}

3.创建CommentRepository

java 复制代码
public interface CommentRepository extends JpaRepository<Comment,Integer>{

    @Transactional
    @Modifying
    @Query("UPDATE t_comment c SET c.author= ?1 WHERE  c.id = ?2")
    public int updateComment(String author,Integer id);

}

4.创建CommentService

在该类中编写数据的查询、修改和删除操作

java 复制代码
@Service
public class CommentService {
    @Autowired
    private CommentRepository commentRepository;
    public Comment findById(int comment_id){
        Optional<Comment> optional = commentRepository.findById(comment_id);
        if(optional.isPresent()){
            return optional.get();
        }
        return null;
    }
    public Comment updateComment(Comment comment){
        commentRepository.updateComment(comment.getAuthor(), comment.getId());
        return comment;
    }
    public void deleteComment(int comment_id){
        commentRepository.deleteById(comment_id);
    }
}

5.创建 CommentController

使用注入的CommentService实例对象编写对Comment评论数据的查询、修改和删除方法。

java 复制代码
@RestController
public class CommentController {
    @Autowired
    private CommentService commentService;
    @GetMapping("/get/{id}")
    public Comment findById(@PathVariable("id") int comment_id) {
        Comment comment = commentService.findById(comment_id);
        return comment;
    }
    @GetMapping("/update/{id}/{author}")
    public Comment updateComment(@PathVariable("id") int comment_id, @PathVariable("author") String author) {
        Comment comment = commentService.findById(comment_id);
        comment.setAuthor(author);
        Comment updateComment = commentService.updateComment(comment);
        return updateComment;
    }
    @GetMapping("/delete/{id}")
    public void deleteComment(@PathVariable("id") int comment_id) {
        commentService.deleteComment(comment_id);
    }
}

6.设置配置信息

复制代码
spring.datasource.url=jdbc:mysql://localhost:3306/springbootdata?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.show-sql=true

7.项目测试

项目启动成功后,在浏览器上访问http://localhost:8080/get/1,浏览器每刷新一次,控制台会新输出一条SQL语句

每执行一次查询操作,都会访问一次数据库并执行一次SQL语句。

8、 启动类上添加@EnableCaching注解

开启基于注解的缓存支持

java 复制代码
//启动类
@EnableCaching
@SpringBootApplication
public class Chapter06Application {
    public static void main(String[] args) {
        SpringApplication.run(Chapter06Application.class, args);

    }
}

9、使用@Cacheable注解对数据操作方法进行缓存管理

复制代码
//业务层
@Cacheable(cacheNames = "comment")
public Comment findById(int comment_id){
    Optional<Comment> optional = commentRepository.findById(comment_id);
    if(optional.isPresent()){
        return optional.get();
    }
    return null;
}

10、Spring Boot默认缓存测试

项目启动成功后,在浏览器上访问http://localhost:8080/get/1,不论浏览器刷新多少次,页面的查询结果都会显示同一条数据

重复进行同样的查询操作,数据库只执行了一次SQL查询语句,说明项目开启的默认缓存支持已经生效。

相关推荐
摇滚侠2 小时前
Spring Boot 3零基础教程,创建第一个 Spring Boot 3 应用,Spring Boot 3 外部配置,笔记03
java·spring boot·笔记
深色風信子12 小时前
SpringBoot 集成 LangChain4j RAG Redis 搜索
spring boot·langchain4j rag·rag redis 搜索·rag redis·springboot rag·rag 搜索
小蒜学长12 小时前
springboot餐厅信息管理系统设计(代码+数据库+LW)
java·数据库·spring boot·后端
Jabes.yang13 小时前
Java大厂面试实录:从Spring Boot到微服务的技术探讨
java·spring boot·spring cloud·微服务·技术面试
咖啡Beans14 小时前
SpringBoot集成MongoDB使用
spring boot·mongodb
q_191328469514 小时前
基于RuoYi框架+Mysql的汽车进销存后台管理系统
数据库·vue.js·spring boot·mysql·汽车·个人开发·若依
悟能不能悟15 小时前
springboot在DTO使用service,怎么写
java·数据库·spring boot
__XYZ15 小时前
RedisTemplate 实现分布式锁
java·spring boot·redis·分布式·junit
Cc001085216 小时前
【AI学习笔记】用AI生成spring boot + redis
spring boot·笔记·学习·ai编程