@Cacheable 多参数
时间: 2023-07-08 19:46:37 浏览: 204
详解Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用
在使用 Spring Cache 技术时,我们可以使用 `@Cacheable` 注解标注一个方法,它可以缓存方法的返回结果。如果方法的参数是简单类型(例如 String、int、long 等),我们可以直接指定参数名称作为缓存的 key。但如果方法的参数是一个对象,我们需要指定一个 SpEL 表达式来构建缓存的 key。
下面是一个使用 `@Cacheable` 注解缓存方法返回结果的示例代码:
```java
@Service
public class UserServiceImpl implements UserService {
@Override
@Cacheable(value = "user", key = "#id")
public User getUserById(Long id) {
// 查询数据库,返回 User 对象
}
@Override
@Cacheable(value = "user", key = "#user.id + '_' + #user.name")
public User getUserByInfo(User user) {
// 查询数据库,返回 User 对象
}
}
```
在上面的代码中,我们分别使用 `@Cacheable` 注解标注了两个方法。第一个方法 `getUserById` 的参数是一个 Long 类型的 id,我们可以直接将它指定为缓存的 key。第二个方法 `getUserByInfo` 的参数是一个 User 对象,我们使用 SpEL 表达式 `#user.id + '_' + #user.name` 构建缓存的 key,其中 `#user.id` 和 `#user.name` 分别代表了 User 对象的 id 和 name 属性。
需要注意的是,SpEL 表达式中的参数名称必须与方法中的参数名称一致。如果方法中的参数名称与 SpEL 表达式中的参数名称不一致,可以使用 `@Param` 注解指定参数名称。例如:
```java
@Override
@Cacheable(value = "user", key = "#user.id + '_' + #user.name")
public User getUserByInfo(@Param("user") User userInfo) {
// 查询数据库,返回 User 对象
}
```
阅读全文