又来活了,这次的接口是调用一个外部接口同步数据然后入库。开干
- 首先定义一下PO,数据有哪些属性
@Getter
@Setter
@ToString
@Accessors(chain=true)//开启链式编程
public class SysJobPO implements Serializable {
private static final long seriaVersionUID = 1L;
private String jobId;
private String userId;
......
}
ps. 现补了一下PO、VO、DTO的概念:
PO:数据对象实体类,字段与数据库字段相对应
VO:(View Object)表现层对象,主要对应展示界面显示的数据对象,用一个VO对象来封装整个界面展示所需要的对象数据。
DTO:(Data Transfer Object) 是一种设计模式之间传输数据的软件应用系统。用来转换从 entity 到 VO,或者从 VO到 entity 的中间的东西。
- 定义VO
@Getter
@Setter
@ToString
@Accessors(chain=true)//开启链式编程
public class SysJobVO implements Serializable {
private static final long seriaVersionUID = 1L;
private String jobId;
private String userId;
......
}
ps. 补一下序列化相关:
- 序列化和反序列化
序列化:把对象转换为字节序列
反序列化:把字节序列转换为对象
-
implements Serializable
实现了Serializable接口就标识该对象可以被序列化,Serializable是一个空接口,没有具体内容。 -
显示声明serialVersionUID
serialVersionUID 的作用是验证序列化和反序列化的过程中,对象是否保持一致。所以在一般情况下我们需要显示的声明serialVersionUID。如果接受者加载的该对象的类的 serialVersionUID 和发送者的类版本号不同的话,反序列化会爆出 InvalidClassException 错误。
什么时候会导致报出这个错误呢?例如在没有显示声明版本号的时候,先将对象进行了序列化;然后不管出于什么目的,该对象的类被修改了,哪怕仅仅是添加了一个强制转换,或者将一个 public 的属性给私有化了,都会影响版本号。此时在这个环境下用反序列化的方法读取以前序列化之后存储起来的对象是会报错的。
原文链接:https://blog.csdn.net/weixin_45410366/article/details/126618512
- 同步的service
public class JobSyncService extends AbstractSyncService<SysJobVO> {
@override
@Transactional(rollbackFor = Exception.class)
public void syncData(List<SysJobVO> data){
//同步数据
SysJobPO sysJobPOList = data.parallelStream().map(e -> {
SysJobPO sysJobPO = new SysJobPO();
sysJobPO.setJobId(e.getJobId());
...
return sysJobPO;
}).collect(Collectors,toList());
//删除
sysJobManager.batchDelete();
//分批插入
sysJobManager.batchInsertInto(sysJobPOList);
}
}
- 抽象类AbstractSyncService<>类
同步的service继承了一个抽象类AbstractSyncService,AbstractSyncService抽象类中定义了一个抽象方法syncData<>,再在子类中重写这个方法。