Spring Data JPA的findOne()更改为Optional怎么使用?

Spring Data JPA的findOne()更改为Optional怎么使用?,第1张

Spring Data JPA的findOne()更改为Optional怎么使用?

至少从

2.0
版本(已
Spring-Data-Jpa
修改)开始
findOne()

现在,
findOne()
没有相同的签名和相同的行为。
以前,它在
CrudRepository
接口中定义为:

T findOne(ID primaryKey);

现在,

findOne()
您将找到的唯一方法
CrudRepository
是在
QueryByExampleExecutor
接口中定义为:

<S extends T> Optional<S> findOne(Example<S> example);

最终由接口

SimpleJpaRepository
的默认实现实现
CrudRepository

此方法是通过示例搜索查询的,您不想将其替换。

实际上,具有相同行为的方法仍在新API中存在,但是方法名称已更改。
它是从更名

findOne()
findById()
CrudRepository
接口:

Optional<T> findById(ID id);

现在它返回一个

Optional
。可以预防的还不错
NullPointerException

因此,现在要调用的实际方法是

Optional<T> findById(ID id)

如何使用?
学习

Optional
用法。以下是有关其规格的重要信息:

可以包含或不包含非null值的容器对象。如果存在值,则isPresent()将返回true,而get()将返回该值。

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


关于如何使用的一些提示

Optional
Optional<T> findById(ID id)

通常,当您通过ID查找实体时,您想返回它或进行特定处理(如果未检索到该实体)。

这里是三个经典用法示例。

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

你可以这样写:

Foo foo = repository.findById(id)         .orElse(new Foo());

或在合理的

null
情况下获取默认值(与更改API之前的行为相同):

Foo foo = repository.findById(id)         .orElse(null);

2)假设如果找到该实体,您想返回它,否则您想抛出一个异常。

你可以这样写:

return repository.findById(id)        .orElseThrow(() -> new EntityNotFoundException(id));

3)假设您要根据是否找到实体来应用不同的处理(无需引发异常)。

你可以这样写:

Optional<Foo> fooOptional = fooRepository.findById(id);if (fooOptional.isPresent()){    Foo foo = fooOptional.get();   // processing with foo ...}else{   // alternative processing....}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5489608.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存