MyBatis-使用Optional拒绝空指针

2,405 阅读1分钟

想必大家都这样写过

public interface OrderMapper {
    @Select("select order_name from `order` where id = #{orderId}")
    Order findOneById(Long orderId);
}
public class OrderServiceImpl implements OrderService {
    @Autowired
    private OrderMapper orderMapper;

    public Order findOneById(Long orderId) {
        Order order = orderMapper.findOneById(orderId);
        String orderName = order.getOrderName();
}

结果一运行就看到讨厌的NullPointException,好气人啊!于是我们要对NPE做判断

public Order findOneById(Long orderId) {
    Order order = orderMapper.findOneById(orderId);
    if (order != null) {
        String orderName = order.getOrderName();
    }
}

假如我们的mapper这样写的话:

@Select("select order_name from `order` where id = #{orderId}")
Optional<Order> findOneById(Long orderId);

那么我们的service层逻辑就再也不用担心NullPointException了

public Order findOneById(Long orderId) {
    Order order = orderMapper.findOneById(orderId).orElseThrow(
        () -> new IllegalArgumentException("this order does not exit"));
    String orderName = order.getOrderName();
}

mybatis版本过低的话是不支持Optional,所以我们需要注意其版本号

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.3.1</version>
</dependency>