奇了怪了,为什么我的数据库查询的时候能查到上条的信息但是删除,却删不掉呢

又是新手教学的时候了今天写的代码非常简单,使用jpa在用的时候自定义查询

我这里直接把大哥的代码搬了过来,功能是做删除公告,非常简单

然后删除代码是这样

 接口是这样

非常的简单。假设两条数据id为01,02,你此时查出的最大值为02,执行删除在查询,你会发现,删除为什么查出来还是02,你不信又删除了一次,还是拿到02, 为啥,大哥过来一看,你的注解@Cacheable,

在Spring框架中,@Cacheable是一个非常有用的注解,主要用于缓存方法的结果,从而提高应用程序的性能。当一个带有@Cacheable注解的方法被调用时,Spring会首先检查缓存中是否存在该方法的结果;如果存在,则直接从缓存中获取结果返回;如果不存在,则执行方法并存储结果到缓存中。

下面是@Cacheable注解的一些主要属性:

- value 或 cacheNames:指定缓存的名字,这是必须的。你可以为一个方法指定一个或多个缓存名,Spring会根据这些名字找到对应的缓存管理器(CacheManager)来存储或检索数据。

- key:定义缓存的键,默认情况下,缓存的键通常是方法参数的组合。你可以使用SpEL(Spring Expression Language)来定制键的生成方式,比如使用#param1 + ":" + #param2这样的表达式来组合参数。

- keyGenerator:指定一个KeyGenerator的实现类来自定义缓存键的生成方式。如果设置了keyGenerator,则key属性会被忽略。

- unless:除非条件为真,否则结果将被缓存,默认值为false。这也可以通过SpEL来设置,常用于只有在某些条件下才缓存结果的情况。

- condition:只有当条件为真时,结果才会被缓存,默认值为true。同样支持SpEL表达式,与unless相反,用于只有在某些条件下才尝试缓存结果。

- cacheManager:指定哪个CacheManager来管理这个缓存,默认为cacheManager。如果你配置了多个CacheManager,可以通过这个属性来指定使用哪一个。

- cacheResolver:指定一个CacheResolver来决定使用哪个缓存。

- sync:表示是否同步地更新缓存,默认为`false`。如果设置为`true`,那么在多线程环境下,对于同一个缓存键的多个请求,只有一个线程会更新缓存,其他线程会阻塞直到缓存加载完成。

使用@Cacheable的一个简单例子如下

import org.springframework.cache.annotation.Cacheable;

public interface SomeService {

    @Cacheable(value = "users", key = "#userId")
    User getUserById(Long userId);
}

在这个例子中,getUserById方法会被缓存,缓存名为users,键由传入的userId参数值确定。这意味着对于同一个userId的多次请求,只会执行一次真正的数据库查询,后续请求将直接从缓存中获取数据。

请注意,在使用@Cacheable之前,你需要确保已经在Spring配置中启用了缓存支持,并且配置了一个或多个CacheManager实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值