使用java 定时任务把接口查询结果保存到新的表中,查询结果是List<map>格式的,,需要将List<map>返回结果一条一条保存到新表,然后在查询新的表返回数据给页面,特殊情况就是前一次查询到的数据里在这次没有查询到数据部分没有,上一次查的的数据这次也有,还有就是上次查询的数据这次没有,还有就是上次没有这次有, 而且还要高效,用mybatis操作数据库
时间: 2023-06-27 20:05:15 浏览: 104
可以使用Java的ScheduledExecutorService来实现定时任务,使用Mybatis进行数据库操作。
首先,定义一个ScheduledExecutorService,使用它来定时执行任务。在执行任务时,通过Mybatis查询出需要保存的List<map>结果,然后遍历每个map,将其插入到新表中。为了解决特殊情况,可以先将上次查询到的数据保存到一个临时表中,然后在本次查询中与临时表进行比较,处理特殊情况的数据。最后,将新表中的数据查询出来返回给页面。
以下是示例代码:
```java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.apache.ibatis.session.SqlSession;
public class QueryTask {
private SqlSession sqlSession;
public QueryTask(SqlSession sqlSession) {
this.sqlSession = sqlSession;
}
public void start() {
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleWithFixedDelay(this::execute, 0, 1, TimeUnit.MINUTES);
}
private void execute() {
try {
// 查询需要保存的数据
List<Map<String, Object>> dataList = sqlSession.selectList("queryDataList");
// 将查询结果保存到新表中
saveDataList(dataList);
// 查询新表数据并返回给页面
List<Map<String, Object>> newDataList = sqlSession.selectList("queryNewDataList");
// TODO: 处理特殊情况的数据
// 返回数据给页面
// TODO: 返回数据给页面
} catch (Exception e) {
// TODO: 处理异常
}
}
private void saveDataList(List<Map<String, Object>> dataList) {
if (!dataList.isEmpty()) {
// 将查询结果插入到新表中
sqlSession.insert("insertDataList", dataList);
sqlSession.commit();
}
}
}
```
在上面的代码中,`queryDataList`和`queryNewDataList`是Mybatis的Mapper文件中定义的查询语句,`insertDataList`是插入数据的语句。在`execute`方法中,先查询需要保存的数据,然后调用`saveDataList`方法将其保存到新表中。接着,查询新表数据并返回给页面,处理特殊情况的数据。最后,将数据返回给页面。在`saveDataList`方法中,如果查询结果不为空,则将其插入到新表中。
阅读全文