java - Spring Boot - Jpa 存储库
问题描述
我在示例项目中遇到了下面这段代码。如果不正确定义 findItemsById 方法,我无法理解它是如何工作的。此方法在扩展 JpaRepositiry 的 ItemsRepository 接口中声明。
public interface ItemsRepo extends JpaRepository<Items,Long> {
Optional<Items> findItemsById(Long id);
}
在服务类中,它的定义如下所示。
public Items findItemsById(Long id) throws Throwable {
return itemsRepo.findItemsById(id).orElseThrow(()-> new UserNotFoundException("items by id "+id+" not found"));
}
如果没有 findItemsById 的实际定义,它是如何工作的。将其声明为可选与此有任何关系吗?
解决方案
Spring Data repository 查询派生机制来表达谓词是允许这样做的特性。基本上,查询是通过“解析”方法名称派生的。为此有一些规则(您必须使用实体属性的名称)和关键字(find
、by
、count
等...)。您可以在以下位置查看更多信息:
推荐阅读
- python - Python Multiprocesssing:当我向 ProcessPoolExecutor 提交对象列表时,提交的是副本还是参考?
- kdb - 如何用另一个数字替换列表中的“x”?
- python - 为什么类属性中的列表实例化后还是类属性,而不是实例属性?
- compatibility - 需要将 SoapAPI 转移到 RestAPI,有什么可用的吗?它是什么样子的?
- javascript - 未捕获的类型错误:$(...).barrating 不是函数 - Rails / Turbolinks
- sql - Conflict on two PostgreSQL transactions with serializable isolation level
- react-native - Use redux-persist instead of local DB for big data? React Native
- jquery - 确保控制器方法实际上是由 ajax 或 mvc 中的 POST 请求调用的
- jquery - Minify Arrays with chrome set
- python-3.x - 如何在 if 语句中正确构建“分数小于 10 或大于 90”?