使用多个foreach进行遍历查询时,如果采用如下图的写法,不加上<if test=""></if>
进行判断的话,可能会出现后面的foreach的参数值传不进去的问题

报错信息如下:
SELECT DISTINCT d.xh 'xh', a.cardID 'cardID', c.name 'patientName', b.sectionid 'sectionid', b.name 'sectionName', d.news_title 'newsTitle', d.accessory 'accessory' FROM tb_gy_clinic a LEFT JOIN tb_gy_subscribe_card c ON a.cardID = c.cardID LEFT JOIN tb_gy_section b ON a.sectionId = b.sectionid LEFT JOIN tb_health_education d ON b.sectionid = d.sectionid WHERE d.type = ? AND a.cardID IN ( ? , ? , ? ) AND d.sectionid IN
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 'IN' 附近有语法错误。
; uncategorized SQLException; SQL state [S0001]; error code [102]; 'IN' 附近有语法错误。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 'IN' 附近有语法错误。
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:89)
通过后台的日志记录可以看出,第二个foreach的值没有传进来,导致sql执行到第二个foreach处时报错
解决办法如下:在每个foreach处加上<if test=""></if>进行入值判断,具体为什么加上条件判断后,就可以正常入值,还在查找资料中,暂时记录下解决问题的方法。

在使用MyBatis进行SQL查询时,若使用多个foreach遍历,若不加<if test=""></if>判断可能导致参数值无法传入。报错信息显示SQL语法错误,原因是第二个foreach的值未传入。解决方法是在每个foreach标签中添加条件判断,以确保值的正确传递。

1082

被折叠的 条评论
为什么被折叠?



