list.size() = 1 但是报空指针NullPointException

本文深入分析了在使用LEFT JOIN时遇到的空指针异常问题,通过实际案例展示了如何正确选择主表避免list元素全为null的情况,强调了在多表连接中确定主表的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 需求

遍历一个list,然后循环获取值

二 代码

 

if(StringUtils.isNotEmpty(booking.getStore_id())) {
    
    costAmountList = bookingMapper.getProductCostPrice(bookingId,             
    booking.getStore_id());

}

if(costAmountList != null && costAmountList.size() > 0) {
        
    if(booking.getContact_gender() == 0) {
        
        for(ProductCostPrice item : costAmountList) {
            
            log.info("男成本价 "+item.getMale_cost_price());
                        
            if(item.getMale_cost_price() != null) {
                
                costAmount = costAmount.add(item.getMale_cost_price());
                
            } else {
                
                costAmount = BigDecimal.ZERO;
            
            }
      
        }
  
    }
}

刚开始做了 list != null && list.size() > 0 判断,并且也判断了字段值 !=  null ,但是线上还是报空指针,我本地模拟数据,结果是

这让我很想不通,为什么会这样?

原来这个list是多张表left join 取出来的,list是 某张表的别名.* 得来的,我把sql放到navicate执行了一下,发现真的都是NULL,我放开了限制,查出来所有表的数据!哇,前面几张表都有数据,到list这张表就全是null。写到这里,有没有想到什么???

三 分析

        关于left join 的问题,left join:如果主表查出数据,右表不管是什么情况,都显示出来!即使都是NULL!
        如果有多个left join,一定要分清楚什么是主表,不然会出现,pcp.* 全是null,即使后台list.size() =1,并且也符合 list != null && list.size() > 0 ,但是,显示 all elements are null。解决办法是,把需要用到到那张表当作主表,这样,因为左表没有数据,想到 LEFT JOIN,so list 为空!

所有注意两点:LEFT JOIN ,谁是主表!

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值