至少从
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....}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)