Optional是什么?

空指针异Optional常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码。受到Google Guava的启发,Optional类已经成为Java 8类库的一部分。Optional实际上是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。 具你的可参考:JDK8新特性之Optional

Mapper的正常写法

Mybatis时代码是这样写的:

@Mapper
public interface FooMapper {
    @Select("select * from FOO where id = #{id}")
    Optional<Foo> selectById(Long id);
}

调用方式:

public class FooController {
    @Autowired
    private FooMapper fooMapper;

    @GetMapping("/{id}")
    public FOO findById(@PathVariable Long id) {
        FOO foo = this.fooMapper.selectById(id);
        if(foo == null) {
          // 抛异常,或者做点其他事情
        }
    }
}

Optional支持后

Mapper的写法

@Mapper
public interface FOOMapper {
    @Select("select * from FOO where id = #{id}")
    Optional<FOO> selectById(Long id);
}

调用

public class FooController {
    @Autowired
    private FooMapper fooMapper;

    @GetMapping("/{id}")
    public Foo findById(@PathVariable Long id) {
        return this.fooMapper.selectById(id)
                .orElseThrow(() -> new IllegalArgumentException("This Foo does not exit!"));
    }
}

从此,再也不需要像以前一样写一大堆代码去判断空指针了。

结束语

欢迎有问题及时交流~ 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多交流