如何在mybatis的mapper接口中为更新查询编写foreach循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在mybatis的mapper接口中为更新查询编写foreach循环相关的知识,希望对你有一定的参考价值。

我在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:找不到参数'item'。可用的参数是[param1,param2,postCode,addressId] ..我在这里做错了什么。foreach循环的正确语法是什么,我可以传递带有List的addressId。

答案

对于复杂的sql语句。我更喜欢使用qazxsw poi / qazxsw poi。

请参阅本页的最后一部分SelectBuilder

另一答案

如果在注释定义的查询中使用XML标记,请尝试将整个SQL代码包装在UpdateBuilder标记中,如mybatis-java-api。可能MyBatis没有看到你的#{item},因为它不知道它(它将所有视为SQL)。

但是,正如Dean Xu sais所说,<script>更适合更复杂的查询。

以上是关于如何在mybatis的mapper接口中为更新查询编写foreach循环的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis Plus

通用Mapper

mapper代理查询

Mybatis Mapper接口是如何找到实现类的-源码分析

mybatis如何根据mapper接口生成其实现类

Spring Boot 整合mybatis时遇到的mapper接口不能注入的问题