Java提高效率小技巧(自用-持续更新)

在for循环里尽量不要使用查询方法

背景

A表为一张事项基础表,B表为一项事项信息表,B表中x字段关联A表,现需要每天执行一次服务,同步B表中需要的数据,同时需要联查A表中的数据。

问题原因

Job中使用for循环遍历B表,在for循环中联查A表数据,整合后同步。如果A表中数据量非常大,会导致每循环一次就查一次A表效率很低。

解决方案

先查出A表数据,循环封装成Map,Key为两表的关联字段x,value为需要联查的数据。该方法可以保证每次服务只查询一次A表数据,不会每循环一次查询一次。

示例(伪代码)

// 不封装Map
// 先查询到需要同步的B表数据
BRecord bs = service.findB(); //BRecord b表实体  service.find() 需要同步的B表数据
// 遍历Bs
for(BRecord b : bs){
    // 根据B表X字段联查AA表数据
    ARecord a = service.findARecordsByBx(b.getX()); //ARecord a表实体
    // 同步
    ........
}
// 封装Map
Map<String, ARecord> aMap = new HashMap<>();
// 查询A表数据
ARecord as = service.findA();
for(ARecord a : as){
    // 循环封装成Map,Key为两表的关联字段x,value为需要联查的数据
    aMap.put(a.getX(),a);
}
// 遍历Bs
for(BRecord b : bs){
    // 根据B表X字段查AA表数据
    ARecord a = map.get(b.getX());
    // 同步
    ........
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值