java for循环里进行sql查询如何优化?

发布于 2022-09-06 00:25:51 字数 687 浏览 15 评论 0

问题:for循环执行sql查询,想优化一下,想着把for循环组合成一条sql语句执行
代码:

        List<DataInfo> dataPotints = (ArrayList<DataInfo>) request.getAttribute("dataPotints");
        ArrayList<IotDataHistory> iotDataHistories = new ArrayList<IotDataHistory>();
        for (int i = 0; i < dataPotints.size(); i++) {
            //这里执行for循环,通过mybatis查询,并将查询的数据放到list里面
            iotDataHistories.add(**dataService.getLastData(dataPotints.get(i))**);
        }
        String responsebody = handlerJson(iotDataHistories);
        log.info("获取最后一条数据返回的json数据" + responsebody);
        return responsebody;

具体应该如何优化,如何合并成一条sql,改怎么合并?用union、or 还是 其它的 ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

薆情海 2022-09-13 00:25:51

表结构和具体sql是什么?
可以通过for循环拼接需要传入sql的查询参数,然后传入sql执行一次查询

初心未许 2022-09-13 00:25:51

为什么不在dataService中添加另外一个getLastDatas(dataPotints)方法,Sql文的检索条件用IN

蒲公英的约定 2022-09-13 00:25:51

select * from table where xx in ('a','b','c');
表示查询table表里面xx等于a,b,c的记录(mysql数据库)

狼亦尘 2022-09-13 00:25:51

把循环移动到mapper,用动态生成sql
比如 你要执行10个 insert into table_name (列1, 列2,...) VALUES (值1, 值2,....)
在mapper里可以拼成 insert into table_name (列1, 列2,...) VALUES (值1, 值2,....),(值1, 值2,....),(值1, 值2,....),(值1, 值2,....),(值1, 值2,....),(值1, 值2,....),(值1, 值2,....),(值1, 值2,....),(值1, 值2,....),(值1, 值2,....)

神经暖 2022-09-13 00:25:51

我也在想,为什么不用in

携余温的黄昏 2022-09-13 00:25:51

可以直接传一个List到mapper然后动态拼成in

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文