我在mapper界面中使用mybatis
进行了更新查询 final String UPDATE ="update table_addresses "
+ "set postCode= #{postCode}"
+ "where id in"
+ "<foreach item='item' index='index'
collection='addressId' "
+ "open='(' separator=',' close=')'> #{item}
</foreach>";
@Update(UPDATE)
public int updateInformation(@Param("postCode") String postCode ,
@Param("addressId") List<AddressID> addressId);
我的AddressId类包含int类型addressId:
AddressId {
private int addressId;
}
现在我调用mapper接口的方法..我发送一个String postCode和对象List地址。
我收到以下错误引起:org.mybatis.spring.MyBatisSystemException:嵌套异常是org.apache.ibatis.binding.BindingException:参数&#39; item&#39;未找到。可用的参数是[param1,param2,postCode,addressId] ..我在这里做错了什么。foreach循环的正确语法是什么,我可以传递带有List的addressId。
答案 0 :(得分:0)
对于复杂的sql语句。我更喜欢使用SelectBuilder
/ UpdateBuilder
。
请参阅本页的最后一部分mybatis-java-api
答案 1 :(得分:0)
如果在注释定义的查询中使用XML标记,请尝试将整个SQL代码包装在<script>
标记中,如String SQL = "<script>(SQL goes here)</script>"
。可能MyBatis没有看到你的#{item},因为它不知道它(它将所有内容视为SQL)。
但是,正如Dean Xu sais所说,sql builder更适合更复杂的查询。