开发时,在普通类调用 Mapper 接口使用 MabatisPlus 功能时会报出【空指针异常( NullPointerException )】
调用的 Mapper 层也叫 Dao层,底层原理还有待学习,以后再更新
解决- @Component 注册该普通Java类
- @Autowired 注册 Mapper 层接口
- 声明该类自身的静态类变量
- 用 @PostConstruct 注入 bean,声明 init() 方法,进行初始化挂载;
- 使用声明的该类的静态类变量,调用 Mapper 层
@Slf4j
@NoArgsConstructor
@Component
public class RawMessageHandler extends AbstractMessageHandler {
public RawMessageHandler(AbstractMessageHandler nextHandler) {
this.nextHandler = nextHandler;
}
@Autowired
private MessageMapper messageMapper;
private static RawMessageHandler rawMessageHandler;
@PostConstruct
private void init(){
rawMessageHandler = this;
rawMessageHandler.messageMapper = this.messageMapper;
}
@Override
public boolean doHandle(ReturnMessage message) {
MessageDO messageDO = new MessageDO();
messageDO.setIgwId(message.ID);
messageDO.setSendAt(DateTimeUtils.string2DateTime(message.MessageUTC));
messageDO.setReceiveAt(DateTimeUtils.string2DateTime(message.ReceiveUTC));
messageDO.setSin(message.SIN);
messageDO.setMobileId(message.MobileID);
messageDO.setPayload(Arrays.toString(message.RawPayload));
messageDO.setRegionName(message.RegionName);
messageDO.setMessageSize(message.OTAMessageSize);
messageDO.setCustomId(message.CustomerID);
messageDO.setTransport(message.Transport);
messageDO.setMobileOwnerId(message.MobileOwnerID);
//messageDO.setType(msgType.getId());
log.info("RawMessageHandler doHandler: 已准备好数据,开始插入数据库");
// FIXME 插入数据库
rawMessageHandler.messageMapper.insert(messageDO);
return false;
}
}



