MyBatis中foreach标签的collection属性的取值方式

foreach标签的collection属性的取值

传的是List列表

接口代码

List findEmpByDeptnos(List deptnos);

xml配置代码

传的是Array数组

接口代码

List findEmpByDeptnos(Integer[] deptnos);

xml配置代码

传的是Map

接口代码

List findEmpByDeptnos(Map> deptnos);

xml配置代码

collection属性总结

  • 如果传入的参数是List,则填写list
  • 如果传入的参数是数组形式,则填写array
  • 如果是多参数传参,传的是map,则填写列表的键key

MyBatis使用foreach标签报错

在使用mybatis过程中,标签算是比较常用的,最近在项目中遇到这样一个问题,使用标签循环拼接SQL语句时

报了一个错误:

nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘__frch_name_0’ in ‘class com.stand.modules.address.param.GeneralAddressQueryParam’

比较疑惑,这个标签使用了很多次了,还是第一次遇到这样的问题,通过查阅资料,得到了解决方案。

原因

首先贴出涉及到的实体类、Mapper接口和对应的XML部分代码

用于Mapper接口传参的实体类:

public class GeneralAddressQueryParam implements Serializable {

    /**
     * 地名,多级地名用逗号分隔
     */
    private String names;

    /**
     * 多地名查询条件
     */
    private List nameList;

    public String getNames() {
        return names;
    }

    public void setNames(String names) {
        this.names = names;
    }

    public List getNameList() {
        return nameList;
    }

    public void setNameList(List nameList) {
        this.nameList = nameList;
    }
}

Mapper接口

List multiNameQuery(GeneralAddressQueryParam queryParam);

XML部分代码


    
        and address like concat('%', #{name}, '%')
    

以上就是问题涉及到的部分代码,出错的原因呢,就是在标签中取值出的错,网上查阅资料说是因为parameterType接收的参数不是List导致的,具体情况未核实。

解决方案

解决方法比较简单,或一种取值方式即可,将标签中遍历出来的值换做如下方式获取


    
        and address like concat('%', #{nameList[${index}]}, '%')
    

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

你可能感兴趣的:(MyBatis中foreach标签的collection属性的取值方式)