数据同步接口开发

文章讲述了在Java开发中如何调用外部接口获取数据并同步入库的过程。定义了PO(持久对象)、VO(视图对象)和DTO(数据传输对象),并讨论了序列化在对象转换中的作用。在同步服务中,使用了抽象类AbstractSyncService进行数据处理,包括数据映射、批量删除和插入,并利用@Transactional注解确保事务的正确性。
摘要由CSDN通过智能技术生成

又来活了,这次的接口是调用一个外部接口同步数据然后入库。开干

  1. 首先定义一下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 的中间的东西。

  1. 定义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

  1. 同步的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);
	}
}
  1. 抽象类AbstractSyncService<>类
    同步的service继承了一个抽象类AbstractSyncService,AbstractSyncService抽象类中定义了一个抽象方法syncData<>,再在子类中重写这个方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值