繁体   English   中英

如何在mybatis的mapper界面中编写foreach循环以进行更新查询

[英]how to write foreach loop for update query in mapper interface in mybatis

我在使用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接口的方法。我正在发送一个字符串postCode和对象列表地址。

我遇到以下错误原因:org.mybatis.spring.MyBatisSystemException:嵌套异常是org.apache.ibatis.binding.BindingException:找不到参数“ item”。 可用的参数是[param1,param2,postCode,addressId]。这里我在做什么错。foreach循环的正确语法是什么,我可以在其中传递包含清单的addressId。

用于复杂的sql语句。 我更喜欢使用SelectBuilder / UpdateBuilder

参见本页最后部分mybatis-java-api

如果在注解定义的查询中使用XML标记,请尝试将整个SQL代码包装在<script>标记中,例如String SQL = "<script>(SQL goes here)</script>" MyBatis可能看不到您的#{item},因为它对此一无所知(它将全部视为SQL)。

但是,正如Dean Xu所说的那样,对于更复杂的查询, sql builder更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM