如何使用Optional<T> findById(ID id);

水深无声 2023-09-26 11:32 183阅读 0赞

学习 可选用法。以下是有关其规范的重要信息:

可能包含也可能不包含非空值的容器对象。如果存在一个值,则 表示() 将返回 true,get() 将返回该值。

提供了依赖于是否存在所包含值的其他方法,例如 orElse() (如果值不存在,则返回默认值)和 ifPresent() (如果值存在,则执行代码块)。


有关如何将“可选”与“可选``<T>查找ById(ID ID)”的一些提示。

通常,当您按 id 查找实体时,您希望返回它或进行特定处理(如果未检索到)。

以下是三个经典用法示例。

  1. 假设如果找到实体,则要获取它,否则要获取默认值。

你可以写:

  1. Foo foo = repository.findById(id)
  2. .orElse(new Foo());
  3. Copy

或者如果有意义,请获取默认值(与API更改前的行为相同):null

  1. Foo foo = repository.findById(id)
  2. .orElse(null);
  3. Copy
  1. 假设如果找到该实体,则要返回它,否则要引发异常。

你可以写:

  1. return repository.findById(id)
  2. .orElseThrow(() -> new EntityNotFoundException(id));
  3. Copy
  1. 假设您要根据是否找到实体来应用不同的处理(不一定引发异常)。

你可以写:

  1. Optional<Foo> fooOptional = fooRepository.findById(id);
  2. if (fooOptional.isPresent()) {
  3. Foo foo = fooOptional.get();
  4. // processing with foo ...
  5. } else {
  6. // alternative processing....
  7. }
  8. Copy

解决方案 2

该方法已重命名为返回 ,因此您必须自己处理缺席:findById(…)``Optional

  1. Optional<Foo> result = repository.findById(…);
  2. result.ifPresent(it -> …); // do something with the value if present
  3. result.map(it -> …); // map the value if present
  4. Foo foo = result.orElse(null); // if you want to continue just like before
  5. Copy

解决方案 3

我总是在广泛使用的Crud存储库存储库/接口中编写默认方法“findByIdOr错误”

  1. @Repository
  2. public interface RequestRepository extends CrudRepository<Request, Integer> {
  3. default Request findByIdOrError(Integer id) {
  4. return findById(id).orElseThrow(EntityNotFoundException::new);
  5. }
  6. }

发表评论

表情:
评论列表 (有 0 条评论,183人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java 使用 IDE

    > IDE是集成开发环境:Integrated Development Environment 的缩写。 使用IDE的好处在于,可以把编写代码、组织项目、编译、运行、调试等放