SpringDataJpa2.0+的findOne()方法被移除问题

SpringDataJpa2.0+的findOne()方法被移除移除

在springboot 2.0以上版本中,CrudRepository接口的findOne(T id)方法已经被官方移除。

以前findOne方法如果查询到没有结果就会返回null,2.0版本后出现getOne方法,但是查询到没有结果的时候就会报错,而不是返回null

这就尴尬了,怎么办呢?
退回2.0版本一下?
不不不,这治标不治本?

如果在Repository中自己写findById则会报编译错误,提示与CrudRepository接口中的Optional findById(ID id)方法返回值类型冲突,也就是说如果想用id这个字段来查询,就只能使用CrudRepository接口的findById方法,并且id只能是主键。

点进Optional类,搜索返回值类型为T的方法,发现有get方法和orElse方法可以获取到我们想要查询的对象。

如果使用get方法,会提示先用isPresent()方法判空。建议使用orElse(null)获取对象。

    //springboot 2.0+版本的时候 JpaRepository 没有findOne 方法了
    //要想获取返回值(没有查询出来的时候)
    //第一种方法,先判断是否是空,再返回null
   /* boolean present = repository.findById(productId).isPresent();
    if(!present){
        return null;
    }*/

   //第二种方法,orElse方法,如果查询不到,就返回null

    return repository.findById(productId).orElse(null);

你可能感兴趣的:(springboot)