//查询表中的数据并保存在lastResult lastResult = jxMjKhTxService.getLastData(constantProperties.getJsbh()); // 获取当前接口查询结果 List<Map<String, Object>> result = jxMjKhTxService.selectJxMjkhTxData(constantProperties.getJsbh()); // 待插入的数据 List<Map<String, Object>> toBeInserted = new ArrayList<>(); // 待更新的数据 List<Map<String, Object>> toBeUpdated = new ArrayList<>(); // 待删除的数据 List<Map<String, Object>> toBeDeleted = new ArrayList<>(); // 遍历上一次查询结果,看看是否需要更新或删除 for (Map<String, Object> last : lastResult) { 第一次运行这个getLastData 没数据怎么办
时间: 2023-06-27 09:04:04 浏览: 145
如果第一次运行 `getLastData` 没有数据,那么 `lastResult` 就会是一个空列表。在这种情况下,你可以直接跳过遍历 `lastResult` 的步骤,直接将当前查询结果作为待插入的数据。例如:
```
lastResult = jxMjKhTxService.getLastData(constantProperties.getJsbh());
if (lastResult.isEmpty()) {
toBeInserted = result;
} else {
// 遍历上一次查询结果,看看是否需要更新或删除
for (Map<String, Object> last : lastResult) {
// ...
}
}
```
相关问题
package wffz.jxmjkh.controller; import lombok.SneakyThrows; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import wffz.common.contants.ConstantProperties; import wffz.jxmjkh.service.JxMjKhTxService; import java.util.ArrayList; import java.util.List; import java.util.Map; public class SaveResultTask implements Runnable { private JxMjKhTxService jxMjKhTxService; // 上一次查询结果 private static List<Map<String, Object>> lastResult = new ArrayList<>(); private ConstantProperties constantProperties; public SaveResultTask(JxMjKhTxService jxMjKhTxService) { this.jxMjKhTxService = jxMjKhTxService; run(); } @SneakyThrows @Override public void run() { //查询表中的数据并保存在lastResult lastResult = jxMjKhTxService.getLastData(constantProperties.getJsbh()); // 获取当前接口查询结果 List<Map<String, Object>> result = jxMjKhTxService.selectJxMjkhTxData(constantProperties.getJsbh()); // 待插入的数据 List<Map<String, Object>> toBeInserted = new ArrayList<>(); // 待更新的数据 List<Map<String, Object>> toBeUpdated = new ArrayList<>(); // 待删除的数据 List<Map<String, Object>> toBeDeleted = new ArrayList<>(); // 遍历上一次查询结果,看看是否需要更新或删除 for (Map<String, Object> last : lastResult) { boolean found = false; for (Map<String, Object> current : result) { if (StringUtils.equals((CharSequence) current.get("jsbh"), (CharSequence) last.get("jsbh")) && StringUtils.equals((CharSequence) current.get("txxId"), (CharSequence) last.get("txxId")) && StringUtils.equals((CharSequence) current.get("sm"), (CharSequence) last.get("sm"))) { found = true; break; } } if (!found) { toBeDeleted.add(last); } } // 遍历当前查询结果,看看是否需要插入或更新 for (Map<String, Object> current : result) { boolean found = false; for (Map<String, Object> last : lastResult) { if (StringUtils.equals((CharSequence) current.get("jsbh"), (CharSequence) last.get("jsbh")) && StringUtils.equals((CharSequence) current.get("txxId"), (CharSequence) last.get("txxId")) && StringUtils.equals((CharSequence) current.get("sm"), (CharSequence) last.get("sm"))) { found = true; break; } } if (found) { toBeUpdated.add(current); } else { toBeInserted.add(current); } } // 批量插入 if (!toBeInserted.isEmpty()) { jxMjKhTxService.batchInsert(toBeInserted); } // 批量更新 if (!toBeUpdated.isEmpty()) { jxMjKhTxService.batchUpdate(toBeUpdated); } // 批量删除 if (!toBeDeleted.isEmpty()) { jxMjKhTxService.batchDelete(toBeDeleted); } // 保存本次查询结果 lastResult = result; } }代码不运行
这是一个保存查询结果的任务类,其中使用了Spring框架的@Autowired注解来注入依赖的JxMjKhTxService服务。任务主要是根据查询结果来进行数据的插入、更新和删除操作,以保持数据库中的数据与查询结果的一致性。其中,待插入、更新和删除的数据保存在相应的列表中,最后通过JxMjKhTxService的批量操作方法来实现对数据库的批量插入、更新和删除。
e; break; } } if (found) { toBeUpdated.add(current); } else { toBeInserted.add(current); } } // 批量插入 if (!toBeInserted.isEmpty()) { yourService.batchInsert(toBeInserted); } // 批量更新 if (!toBeUpdated.isEmpty()) { yourService.batchUpdate(toBeUpdated); } // 批量删除 if (!toBeDeleted.isEmpty()) { yourService.batchDelete(toBeDeleted); } lastResult = result; // 保存本次查询结果 } } 在Spring容器中配置ScheduledExecutorService: 复制 @Configuration @EnableScheduling public class ScheduleConfig { @Bean(name = "scheduledExecutorService") public ScheduledExecutorService scheduledExecutorService() { return Executors.newSingleThreadScheduledExecutor(); } } 在你的Controller中注入ScheduledExecutorService,启动定时任务: 复制 @RestController public class YourController { @Autowired private ScheduledExecutorService scheduledExecutorService; @Autowired private YourService yourService; @PostConstruct public void init() { scheduledExecutorService.scheduleAtFixedRate(new SaveResultTask(yourService), 0, 10, TimeUnit.MINUTES); } @GetMapping("/result") public List<Map<String, Object>> getResult() { return yourService.getResultFromNewTable(); } } 在YourService中使用MyBatis操作数据库,实现批量插入、更新、删除等方法。 这样就可以实现每10分钟保存一次接口查询结果到新表中,并且高效地查询新表返回数据给页面。同时也考虑了上一次查询结果和本次查询结果的差异情况,避免了重复插入和更新。 yourservice 代码怎么写
你可以在YourService中使用MyBatis操作数据库,实现批量插入、更新、删除等方法。以下是一个简单的示例代码:
```
@Service
public class YourService {
@Autowired
private YourMapper yourMapper;
public void batchInsert(List<YourEntity> entities) {
yourMapper.batchInsert(entities);
}
public void batchUpdate(List<YourEntity> entities) {
yourMapper.batchUpdate(entities);
}
public void batchDelete(List<Integer> ids) {
yourMapper.batchDelete(ids);
}
public List<Map<String, Object>> getResultFromNewTable() {
return yourMapper.getResultFromNewTable();
}
}
```
其中,YourMapper是一个使用MyBatis的Mapper接口,包含了数据库操作的方法。示例代码如下:
```
@Mapper
public interface YourMapper {
void batchInsert(@Param("entities") List<YourEntity> entities);
void batchUpdate(@Param("entities") List<YourEntity> entities);
void batchDelete(@Param("ids") List<Integer> ids);
List<Map<String, Object>> getResultFromNewTable();
}
```
在这个Mapper接口中,我们定义了批量插入、更新、删除和查询新表数据的方法,并使用了@param注解来指定方法参数的名称,方便MyBatis进行处理。
注意,这里的YourEntity是你要操作的实体类,包含了需要插入、更新的字段。你可以根据实际需求来定义这个实体类的属性。
阅读全文
相关推荐








