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

 更新时间:2022年08月23日 14:39:14   作者:做个大侠  
这篇文章主要介绍了MyBatis中foreach标签的collection属性的取值方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

foreach标签的collection属性的取值

传的是List列表

接口代码

List<Emp> findEmpByDeptnos(List<Integer> deptnos);

xml配置代码

<select id="findEmpByDeptnos" resultType="Emp" parameterType="list">
    SELECT * FROM emp e
    WHERE e.deptno IN
    <foreach collection="list" item="deptno" open="(" separator="," close=")">
        #{deptno}
    </foreach>
</select>

传的是Array数组

接口代码

List<Emp> findEmpByDeptnos(Integer[] deptnos);

xml配置代码

<select id="findEmpByDeptnos" resultType="Emp" parameterType="int">
    SELECT * FROM emp e
    WHERE e.deptno IN
    <foreach collection="array" item="deptno" open="(" separator="," close=")">
        #{deptno}
    </foreach>
</select>

传的是Map

接口代码

List<Emp> findEmpByDeptnos(Map<String,List<Integer>> deptnos);

xml配置代码

<select id="findEmpByDeptnos" resultType="Emp" parameterType="map">
    SELECT * FROM emp e
    WHERE e.deptno IN
    <foreach collection="myKey" item="deptno" open="(" separator="," close=")">
        #{deptno}
    </foreach>
</select>

collection属性总结

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

MyBatis使用foreach标签报错

在使用mybatis过程中,<foreach>标签算是比较常用的,最近在项目中遇到这样一个问题,使用<foreach>标签循环拼接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<String> nameList;

    public String getNames() {
        return names;
    }

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

    public List<String> getNameList() {
        return nameList;
    }

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

Mapper接口

List<GeneralAddressFullNameDTO> multiNameQuery(GeneralAddressQueryParam queryParam);

XML部分代码

<if test="nameList != null and nameList.size() > 0">
    <foreach collection="nameList" item="name">
        and address like concat('%', #{name}, '%')
    </foreach>
</if>

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

解决方案

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

<if test="nameList != null and nameList.size() > 0">
    <foreach collection="nameList" item="name" index="index">
        and address like concat('%', #{nameList[${index}]}, '%')
    </foreach>
</if>

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

相关文章

  • Java面向对象之类的继承介绍

    Java面向对象之类的继承介绍

    大家好,本篇文章主要讲的是Java面向对象之类的继承介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • CentOS 7.9服务器Java部署环境配置的过程详解

    CentOS 7.9服务器Java部署环境配置的过程详解

    这篇文章主要介绍了CentOS 7.9服务器Java部署环境配置,主要包括ftp服务器搭建过程、jdk安装方法以及mysql安装过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Java之SpringCloudAlibaba Sentinel组件案例讲解

    Java之SpringCloudAlibaba Sentinel组件案例讲解

    这篇文章主要介绍了Java之SpringCloudAlibaba Sentinel组件案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 解决Mybatis中result标签识别不了的情况

    解决Mybatis中result标签识别不了的情况

    这篇文章主要介绍了解决Mybatis中result标签识别不了的情况,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
    2022-01-01
  • Spring4下validation数据校验无效(maven)的解决

    Spring4下validation数据校验无效(maven)的解决

    这篇文章主要介绍了Spring4下validation数据校验无效(maven)的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Spring MVC文件配置以及参数传递示例详解

    Spring MVC文件配置以及参数传递示例详解

    这篇文章主要给大家介绍了关于Spring MVC文件配置以及参数传递的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 利用Stream聚合函数如何对BigDecimal求和

    利用Stream聚合函数如何对BigDecimal求和

    这篇文章主要介绍了利用Stream聚合函数如何对BigDecimal求和问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Spring Cloud Alibaba教程之Sentinel的使用

    Spring Cloud Alibaba教程之Sentinel的使用

    这篇文章主要介绍了Spring Cloud Alibaba教程之Sentinel的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Java中的super关键字_动力节点Java学院整理

    Java中的super关键字_动力节点Java学院整理

    这篇文章主要介绍了Java中的super关键字的相关知识,需要的朋友参考下
    2017-04-04
  • Intellij IDEA导入JAVA项目并启动(图文教程)

    Intellij IDEA导入JAVA项目并启动(图文教程)

    这篇文章主要介绍了Intellij IDEA导入JAVA项目并启动,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08

最新评论