作者:相对论! | 来源:互联网 | 2023-10-14 19:23
在开发中很多需求会让我们觉得需要在for循环里调用执行sql方法,但是在for循环里调用执行sql方法会让程序运行速度变的很慢,特别是在数据量极大的情况下,所以就需要我们优化sql,避免在for循环里调用执行sql方法,提高程序运行速度。
在开发中遇到的比较多的需要在for循环里调用执行sql方法的有以下几种情况:
1、批量查询出主表信息后,需要根据主表的某个字段(如主键)去查询附表
此时最简单的做法当然是:
for (Student stu : studentList) {
// 查询每个学生的成绩单
studentDao.listScos(stu);
}
但是这样会执行很多次sql语句,效率不高,如果数据量很大的话,等待时间会很长
所以我们可在代码中先遍历查询出来的主表信息集合,然后将需要查询的字段值拼接起来,例如要根据主表的主键studentId去查询附表的信息,就可以使用StringBuilder将所有studentId拼接好,再传入sql中:
这样就能一次性将所有满足条件的附表查询出来了
2、批量更新,条件和需要更新的值都需要从集合中的当条数据去取,且不能foreach整个更新语句时:
UPDATE dip_dise_oprn_crsp_d
when DISE_OPRN_CRSP_ID = #{i.diseOprnCrspId} then #{i.diseSco}
when DISE_OPRN_CRSP_ID = #{i.diseOprnCrspId} then #{i.actDiseSco}
when DISE_OPRN_CRSP_ID = #{i.diseOprnCrspId} then #{i.valiFlag}
DISE_OPRN_CRSP_ID = #{i.diseOprnCrspId}
我在开发中遇到比较多的是这两种情况,后续遇到再进行补充…