直接使用new HashMap<>().put(“supplierOrderCode“, map.get(“supplierOrderCode“))进行传值的坑

需求

系统查询时发现某个页面查询速度非常慢,优化查询效率。

思路

首先想到是否时sql查询问题,索引是否添加且生效。
当sql没有问题时,查看是否是因为代码大量循环请求数据库导致接口速度缓慢。

问题定位

  1. 首先,使用EXPLAIN对代码中的查询语句进行速度检测,结果显示SQL查询均正常使用了索引。
  2. 对代码中的循环语句进行检查,发现循环中访问数据库的操作并不多。
  3. 最终,通过使用debug进行问题定位,发现某行代码未能正常传递查询条件,导致SQL语句执行了全表扫描。

问题分析

在Java中,HashMapput方法返回的是与指定键关联的先前值。如果键之前没有任何值关联,则返回null。因此,当这样使用put方法时:

List<Map> list = (List<Map>) dao.findForList("Mapper.select",new HashMap<>().put("code", map.get("code")));

这个表达式的实际效果是:

  1. 创建一个新的HashMap对象。
  2. 调用put方法,将键值对("code", map.get("code"))插入到该HashMap中。
  3. put方法返回先前与键"code"关联的值。在这种情况下,由于这是一个新的HashMap,所以返回null

因为put方法返回的是先前的值,而不是HashMap本身,你实际上是将null传递给了dao.findForList方法。

为了正确地创建并传递包含键值对的HashMap对象,应该分开这两个步骤:首先创建HashMap对象,然后向其中添加键值对。以下是修正后的代码:

// 创建一个HashMap对象
Map<String, Object> map= new HashMap<>();

// 向HashMap对象中添加键值对
map.put("code", map.get("code"));

// 将HashMap对象传递给dao.findForList方法
List<Map> inspectionorderList = (List<Map>) dao.findForList("Mapper.select", map);

通过这种方式,可以确保map对象包含了所需的键值对,并且能够正确传递给dao.findForList方法。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
优化这段代码 List<Map<String, String>> topModel = new ArrayList<>(); List<Map<String, String>> imageTextModel = new ArrayList<>(); List<Map<String, String>> listModel = new ArrayList<>(); List<Map<String, String>> videoModel = new ArrayList<>(); List<Map<String, String>> cardRotationModel = new ArrayList<>(); List<Map<String, String>> otherModel = new ArrayList<>(); // 获取样式模板字典枚举 for (final StyleModel styleModel : StyleModel.class.getEnumConstants()) { final Map<String, String> map = new HashMap<>(); map.put("sign", styleModel.getSign()); map.put("name", styleModel.getName()); switch (styleModel.getType()) { case 1: topModel.add(map); break; case 2: imageTextModel.add(map); break; case 3: listModel.add(map); break; case 4: videoModel.add(map); break; case 5: cardRotationModel.add(map); break; default: otherModel.add(map); } } BaseEnumUtil.getStyleModel().add(new HashMap<>() {{ put("name", "顶部模板"); put("list", topModel); }}); BaseEnumUtil.getStyleModel().add(new HashMap<>() {{ put("name", "图文模板"); put("list", imageTextModel); }}); BaseEnumUtil.getStyleModel().add(new HashMap<>() {{ put("name", "列表模板"); put("list", listModel); }}); BaseEnumUtil.getStyleModel().add(new HashMap<>() {{ put("name", "视频模板"); put("list", videoModel); }}); BaseEnumUtil.getStyleModel().add(new HashMap<>() {{ put("name", "轮播图模板"); put("list", cardRotationModel); }}); BaseEnumUtil.getStyleModel().add(new HashMap<>() {{ put("name", "其它模板"); put("list", otherModel); }});
06-02
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懒人w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值