为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Helenr 2019-03-01 10:27:27
问题: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 还是 其它的 ?
查看完整描述

6 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

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

查看完整回答
1 反对 回复 2019-03-01
?
HUH函数

TA贡献1836条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-03-01
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-03-01
?
jeck猫

TA贡献1909条经验 获得超7个赞

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

查看完整回答
反对 回复 2019-03-01
?
呼唤远方

TA贡献1856条经验 获得超11个赞

把循环移动到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,....)

查看完整回答
反对 回复 2019-03-01
?
慕的地10843

TA贡献1785条经验 获得超8个赞

我也在想,为什么不用in

查看完整回答
反对 回复 2019-03-01
  • 6 回答
  • 0 关注
  • 4005 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信