我正在使用ehcache在spring项目中缓存数据。
例如,如果您要获取数据mst_store表,则当前我正在使用以下代码
public interface MstStateRepository extends JpaRepository<MstState, Integer> {
@Override
@Cacheable("getAllState")
List<MstState> findAll();
您可以看到findAll
方法返回了List<MstState>
但是我没有列出我需要的返回类型作为Map。表示键为stateId和Value中的对象。
我可以在服务标签中执行此操作,但是我需要为此编写单独的逻辑,如下所示
@Service
class CacheService {
@Autowired
private MstStateRepository mstStateRepository;
Map<Integer, MstState> cacheData = new HashMap<>();
public List<MstState> findAllState() {
List<MstState> mstStates = mstStateRepository.findAll();
for (MstState mstState : mstStates) {
cacheData.put(mstState.getStateId);
cacheData.value(mstState);
}
}
}
因此,除了编写单独的逻辑外,我们还可以直接从存储库获取Map。请建议
答案 0 :(得分:1)
您可以使用Java 8 default
方法来实现此功能,从而允许您编写默认实现,jpa可以覆盖 ,但不会,并且也可以使用Java 8中引入的流:
public interface MstStateRepository extends JpaRepository<MstState, Integer> {
@Cacheable("getAllState")
default Map<Integer, MstState> getAllState(){
return findAll().stream()
.collect(Collectors.toMap(
MstState:.getStateId,
UnaryOperator.identity()
));
}
}