使用Mapper层使用@Select注解时使用<foreach>标签报BindingException: Parameter ‘item‘ not found.
项目场景:
使用@Select注解写SQL,里使用了<foreach>标签的item='item'
问题描述:
@Select(
"SELECT * FROM t_customer_info WHERE cert_type IN " +
"<foreach item='item' index='index' collection='list' " +
"open='(' separator=',' close=')'>" +
"#{item}" +
"</foreach>")
List<CustInfo> selectByCertTypes(@Param("list") List<String> certTypes);
在foreach标签中,使用了#{item} ,报 BindingException: Parameter ‘item’ not found.
原因分析:
在@Select注解中,写带标签的复杂SQL ,需要使用“《script》” 标签
解决方案:
加上“《script》” 标签即可
@Select("<script>" + "SELECT * FROM t_customer_info WHERE cert_type IN " + "<foreach item='item' index='index' collection='list' " + "open='(' separator=',' close=')'>" + "#{item}" + "</foreach>" + "</script>") List<CustInfo> selectByCertTypes(@Param("list") List<String> certTypes);