使用Optional避免查询空指针

文章 , 技术分享
3215 0

你真的会使用Optional避免空指针NPE吗?

使用Optional可以避免查询到的数据库中的数据为null从而导致的后面代码出现的问题,还可以减少自己写的if else判断查询的内容是否为空

2023-08-13T12:38:50.png

使用方法:

    @PostMapping("test3")
    @ResponseBody
    public Optional<Users> test3(@RequestBody Map<String,String> data) {
        System.out.println(data.get("username"));
        Users users = usersMapper.selectOne(data.get("username"));
        Optional<Users> users1 = Optional.ofNullable(users);
        System.out.println("user:"+users1);
        //判断如果这个存在的话就调用下面的语句
        if (users1.isPresent()){
            System.out.println(users1.get().getUsername());
            return users1;
        }else {
//            否则返回空的user
            Users user =  new Users();
            return Optional.of(user);
        }

当然java中已经替我们封装好这个使用方法了,不需要让我们自己使用if判断然后再返回了,除非有其他用法

@ResponseBody
    public Optional<Users> test4(@RequestBody Map<String,String> data) {
        System.out.println(data.get("username"));
        Users users = usersMapper.selectOne(data.get("username"));
        Optional<Users> users1 = Optional.ofNullable(users);

        //如果不存在就使用默认值
        Users myuser = users1.orElse(new Users());
        System.out.println(myuser);

        return Optional.of(myuser);
    }

查询具体某一个值时也看查询,如果没找到则可以使用指定值
查询具体某一个值时也看查询,如果没找到则可以使用指定值

    @PostMapping("test5")
    @ResponseBody
    public Optional<Users> test5(@RequestBody Map<String,String> data) {
        System.out.println(data.get("username"));
        Users users = usersMapper.selectOne(data.get("username"));
        Optional<Users> users1 = Optional.ofNullable(users);
        //如果没找到则可以使用指定值
        users1.map(Users::getUsername).orElse("没找到名字");
        System.out.println(users1.map(Users::getUsername).orElse("没找到名字"));
        Users myuser = users1.orElse(new Users());
        return Optional.of(myuser);
    }

适当使用可以帮助提高代码的可维护性(当然看起来也会更高级,至少比if(user != null)高级一点吧

最后更新 2023-08-14
评论 ( 0 )
OωO
隐私评论