使用java 定时任务把接口查询结果保存到新的表中,查询结果是List<map>格式的,,需要将List<map>返回结果一条一条保存到新表,然后在查询新的表返回数据给页面,特殊情况就是前一次查询到的数据里在这次没有查询到数据部分没有,上一次查的的数据这次也有,还有就是上次查询的数据这次没有,还有就是上次没有这次有, 而且还要高效,用mybatis操作数据库
时间: 2023-06-27 08:05:12 浏览: 89
可以使用Java的定时任务框架,例如Quartz或者Spring Schedule来实现定时任务。在定时任务中,调用接口查询数据并把结果保存到新表中可以使用MyBatis框架进行操作。具体的步骤如下:
1. 定义实体类,对应新表的结构;
2. 定义Mapper接口,通过MyBatis进行操作新表的增删改查;
3. 在定时任务中调用接口查询数据,将返回的List<map>格式的数据转换成实体类对象,然后逐条插入到新表中;
4. 查询新表,将结果返回给页面。
下面是一个简单的示例代码:
```java
// 定时任务方法
@Scheduled(cron = "0 0 0 * * ?") // 每天零点执行
public void saveDataToNewTable() {
// 调用接口查询数据
List<Map<String, Object>> dataList = getDataFromInterface();
// 将List<map>格式的数据转换成实体类对象
List<NewTableEntity> entityList = convertData(dataList);
// 将数据逐条插入到新表中
for (NewTableEntity entity : entityList) {
newTableMapper.insert(entity);
}
// 查询新表并返回结果给页面
List<NewTableEntity> result = newTableMapper.select();
}
// 将List<map>格式的数据转换成实体类对象
private List<NewTableEntity> convertData(List<Map<String, Object>> dataList) {
List<NewTableEntity> entityList = new ArrayList<>();
for (Map<String, Object> data : dataList) {
NewTableEntity entity = new NewTableEntity();
entity.setField1(data.get("field1"));
entity.setField2(data.get("field2"));
// ...
entityList.add(entity);
}
return entityList;
}
```
其中,NewTableEntity为新表的实体类,newTableMapper为操作新表的Mapper接口。在定时任务方法中,调用getDataFromInterface()方法获取原始数据,然后将数据转换成实体类对象entityList,逐条插入到新表中。最后,再查询新表并返回结果给页面即可。
阅读全文