/**
* 两个集合对比,获取集合中不相同的数据
* @param listA 已有数据信息集合
* @param listB 数据库中信息集合
* @return
*/
public List<AreaCameraInformation> getDifferListByMap(List<AreaCameraInformation> listA, List<AreaCameraInformation> listB){
List<AreaCameraInformation> listC = new ArrayList<>(listA);
List<AreaCameraInformation> listD = new ArrayList<>(listA);
List<AreaCameraInformation> listE = new ArrayList<>(listB);
//找到已有集合和数据库集合中都存在的数据,以防重复存储
for(int i = 0;i<listA.size();i++){
for (AreaCameraInformation information : listB) {
if(listA.get(i).equals(information)){
System.out.println(i);
listD.remove(listA.get(i));//返回查询到的不同的数据listD,把相同的都去除
break;
}
}
}
//找出数据库中有但是已有数据已经删除的集合,并在下面删除
for(int i = 0;i<listB.size();i++){
for (int j = 0;j< listC.size(); j++){
if(listB.get(i).equals(listC.get(j))){
listE.remove(listB.get(i));
break;
}
}
}
//listE为数据库中有的数据已有集合没有的数据,和数据库中跟另一集合不同的数据
for (AreaCameraInformation information : listE) {
//把这一条数据删除
areaCameraInformationMapper.deleteByCameraId(information.getCameraId());
}
//listD为已有的集合中有但是数据库中集合没有或者不一样的数据
return listD;
}
这种对比需要重写equals
//需要对比两个集合中的数据是否完全一样,重写equals将所有字段全部的值全部做对比
@Override
public boolean equals(Object obj){
if(obj==null){
return false;
}
if(obj instanceof AreaCameraInformation){
AreaCameraInformation information = (AreaCameraInformation) obj;
if(information.cameraId.equals(this.cameraId) && information.cameraType.equals(this.cameraType) &&
information.decodetag.equals(this.decodetag) &&
information.extraField.equals(this.extraField) &&
information.indexCode.equals(this.indexCode) && information.isOnline.equals(this.isOnline) &&
information.latitude.equals(this.latitude) && information.longitude.equals(this.longitude) &&
information.name.equals(this.name) && information.parentIndexCode.equals(this.parentIndexCode)&&
information.pixel.equals(this.pixel) && information.updateTime.equals(this.updateTime)){
//description字段没有数据,对比时会出现空指针所以再单独判断
if(information.description !=null && this.description != null){
if(information.description.equals(this.description)){
return true;
}else{
return false;
}
}else if((information.description ==null || information.description.equals("")) && (this.description == null || this.description .equals(""))){
return true;
}else{
return false;
}
}else{
return false;
}
}
return false;
}
最后再将数据库中和已有集合相同主键的值删除掉以防重复
/**
* 将数据库中和数据差相同的那一条直接删除,再将数据差集合存入数据库
* @param difference 数据差集合
* @param sql 数据库查出来的集合
*/
public void DeleteAndRenew(List<AreaCameraInformation> difference,List<AreaCameraInformation> sql){
for (AreaCameraInformation information : difference) {
for (AreaCameraInformation sq : sql) {
if(information.getCameraId().equals(sq.getCameraId())){
//删除该数据
areaCameraInformationMapper.deleteByCameraId(sq.getCameraId());
break;
}
}
}
if (!difference.isEmpty()){
//存数据
for (AreaCameraInformation information : difference) {
areaCameraInformationMapper.saveData(information);
}
}
}
最后完成数据库同步更新