一现象:
对接第三方数据,先全量存入数据库,然后进行跑批清洗,在清洗过程中发现每次都有不同条数的数据重复。
二根本原因:
就是数据库中有的重复的字段条数存在空格,有的没有。
QueryWrapper<DDeviceType> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("protocol_type",zhttVhc.getTerminalModel());
if(StringUtils.isNotBlank(zhttVhc.getEquipmentmodel())) {
queryWrapper.eq("device_model", zhttVhc.getEquipmentmodel());
}else {
queryWrapper.isNull("device_model");
}
DDeviceType dDeviceType = dDeviceTypeMapper.selectOne(queryWrapper);
if (Objects.isNull(dDeviceType)) {
deviceType.setProtocolType(zhttVhc.getTerminalModel());
if (StringUtils.isNotBlank(zhttVhc.getEquipmentmodel())) {
deviceType.setDeviceModel(zhttVhc.getEquipmentmodel().trim());
}
deviceType.setCommunicationModel(zhttVhc.getCommunicationMode());
deviceType.setLocationModel(zhttVhc.getPositionMode());
deviceType.setCreatetime(now);
deviceType.setUpdateTime(now);
三解决办法:
之前是有发现数据存在空格,当时只是把插入时候去掉了空格,通过查询并插入时,查询没有去空格判断。
解决一是:queryWrapper.eq("device_model", zhttVhc.getEquipmentmodel().trim()); 查询这一行也加入去空格。
解决二是(根本办法):在存入数据时,就去掉所有空格。