代码优化:遍历查询数据库代码优化

场景:针对遍历查询数据库的两种场景做出优化,都是将多次遍历查询改为一条查询。
把数据库层面的 IO压力 转化为 代码层面的CPU和内存压力

SQL 映射 HashMap< String, List < T > >

  1. 先查list,再stream分组
  2. 搞个头行的实体类,resultMap返回

低效代码

for(TransportPlanningLines t:lines){
    List<TransportPlanningLines> transportPlanningLines = this.transportPlanningLinesRepository.select("transportPlanningNumber",t.getTransportPlanningNumber());
}      

以先list再stream分组,优化后

//筛选出所有行id
List<String> collect = lines.stream().map(TransportPlanningLines::getTransportPlanningNumber).collect(Collectors.toList());
//查出所有得lineList
List<TransportPlanningLines> linesList = transportPlanningLinesMapper.selectTransportPlanningLines(collect);
//根据TransportPlanningNumber分组
Map<String, List<TransportPlanningLines>> collect1 = linesList.stream().collect(Collectors.groupingBy(TransportPlanningLines::getTransportPlanningNumber));

//配置合计数量
for(TransportPlanningLines t:lines){
    List<TransportPlanningLines> transportPlanningLines = collect1.get(t.getTransportPlanningNumber());
}

SQL 映射List< HashMap< String,String> >

参考资料:https://www.cnblogs.com/newbest/p/10018685.html
此处低效代码与上面类似,优化后如下

List<Long> collect = transportPlanningLines.stream().map(TransportPlanningLines::getRequiredPlanItemLinesId).collect(Collectors.toList());
List<HashMap<String, String>> longStringHashMap = requiredPlanItemLinesMapper.selectJtMaterialCodeAndComments(collect);

for(TransportPlanningLines t:transportPlanningLines){
    String manufactureFactory = t.getManufactureFactory();
    String weightWay = t.getWeightWay();
    String acceptanceQuantity = t.getAcceptanceQuantity().toString();
    for(HashMap<String, String> map:longStringHashMap){
        if(map.containsValue(t.getRequiredPlanItemLinesId())){
            String jtMaterialCode = map.get("jt_material_code");
            String comments = map.get("comments");
            //业务代码忽略
        }
    }
}

Mapper如下

List<HashMap<String,String>> selectJtMaterialCodeAndComments(@Param("list") List<Long> list);

SQL如下

<select id="selectJtMaterialCodeAndComments" resultType="java.util.HashMap">
    select
    rpil.required_plan_item_lines_id,
    rpil.comments,
    si.jt_material_code
    from scux_ynjt_required_plan_item_lines rpil
    left join smdm_item si on rpil.material_code=si.item_code
    WHERE
    rpil.required_plan_item_lines_id in
    <foreach collection="list" item="item" open="(" separator="," close=")">
        #{item}
    </foreach>
</select>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值