记一次排查Mybatisplus的批量更新 updateBatchById 方法空指针问题

时间:2024-04-01 13:46:00

刚开始代码程序的结构是

记一次排查Mybatisplus的批量更新 updateBatchById 方法空指针问题

ServiceImpl 是 com.baomidou.mybatisplus.service.impl.ServiceImpl  包下的程序

现在是在 ClientUserServiceImpl 的某个方法调用 updateBatchById  的批量更新方法,会报空指针。

经过调试发现底层有段代码

记一次排查Mybatisplus的批量更新 updateBatchById 方法空指针问题

记一次排查Mybatisplus的批量更新 updateBatchById 方法空指针问题

记一次排查Mybatisplus的批量更新 updateBatchById 方法空指针问题

记一次排查Mybatisplus的批量更新 updateBatchById 方法空指针问题

问题就出现上面这张图的代码里面,mybatis 会从调用的类 拿到super父类,然后拿到父类的泛型参数param的 第二个参数,也就是 要拿到 User 实体类,才能知道 TableInfo 信息。

但是由于 ClientUserServiceImpl 的父类是 BaseUserServiceImpl , 这个类 在执行这段代码的时候,会返回 Object 出去,而不是 User 实体类。所以在后面

记一次排查Mybatisplus的批量更新 updateBatchById 方法空指针问题

要去获取 tableInfo 信息的时候,就会报出 NullPointException 空指针异常。

 

总结: 要想使用 mybatis的各种方法。最好都是直接继承 ServiceImpl 这个类,不能继承这个类的子类。