详解Mybatis 传递参数类型为List的取值问题

问题描述:

参数传递为List时:

当传递一个 List 实例或者数组作为参数对象传给 Mybatis。此时,Mybatis 会自动将它包装在一个 Map 中,用名称在作为键。List 实例将会以“list” 作为键,而数组实例将会以“array”作为键。所以,当我们传递的是一个List集合时,mybatis会自动把我们的list集合包装成以list为Key值的map。

DAO 层:

List<User> selectUserByIDs( List IDs);

XML文件:

<select id="selectUserByIDs" parameterType="java.util.List" resultType="user">
    select * from user
    <where>
      <if test="IDs != null and IDs.size() >0">
        <foreach collection="IDs" open=" and id in (" close=")" item="uid" separator=",">
          #{uid}
        </foreach>
      </if>
    </where>
</select>

报错信息:

org.apache.ibatis.binding.BindingException: Parameter ‘IDs' not found. Available parameters are [collection, list]

解决方法:

方法一:将我们的XML中collection属性值直接设置为list

DAO 层:

List<User> selectUserByIDs( List IDs);

XML文件:

<select id="selectUserByIDs" parameterType="java.util.List" resultType="user">
    select * from user
    <where>
      <if test="list != null and list.size() >0">
        <foreach collection="list" open=" and id in (" close=")" item="uid" separator=",">
          #{uid}
        </foreach>
      </if>
    </where>
</select>

方法二: 利用注解@Param指定我们的入参名称

DAO层:

List<User> selectUserByIDs(@Param("IDs") List IDs);

XML文件:

<select id="selectUserByIDs" parameterType="java.util.List" resultType="user">
    select * from user
    <where>
      <if test="IDs != null and IDs.size() >0">
        <foreach collection="IDs" open=" and id in (" close=")" item="uid" separator=",">
          #{uid}
        </foreach>
      </if>
    </where>
</select>

到此这篇关于详解Mybatis 传递参数类型为List的取值问题的文章就介绍到这了,更多相关Mybatis 传递参数类型为List的取值内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2020-10-17

mybatis利用association或collection传递多参数子查询

有时候我们在查询数据库时,需要以查询结果为查询条件进行关联查询. 在mybatis 中通过 association 标签(一对一查询,collection 一对多 查询) 实现延迟加载子查询 <resultMap id="xxxMap" type="xxxx.bean.xxx" extends="zzzzMap"> <association property="destName" javaType="

Mybatis多参数及实体对象传递实例讲解

在使用Mybatis的时候,经常会有各种各样的参数传递,不同类型,不同个数的参数. 先上个例子: public List<LifetouchRelease> findOfficeList(@Param("lifetouchRelease") LifetouchRelease lifetouchRelease, @Param("advertisementId") String advertisementId, @Param("officeName

Mybatis传递多个参数的三种实现方法

方案一 Dao层的函数方法 1 Public User selectUser(String name,String area); 对应的Mapper.xml <select id=" selectUser" resultMap="BaseResultMap"> select * from user_user_t where user_name = #{userName,jdbcType=VARCHAR} and user_area=#{userArea,

Mybatis传递多个参数的解决办法(三种)

小编给大家分享三种方案解决mybatis传递多个参数的问题,具体介绍如下所示: 第一种方案 DAO层的函数方法 Public User selectUser(String name,String area); 对应的Mapper.xml <select id="selectUser" resultMap="BaseResultMap"> select * from user_user_t where user_name = #{0} and user_a

解析Mybatis连续传递多个参数的方法

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 下面给大家介绍Mybatis连续传递多个参数的方法.具体代码如下所示: // order by 排序 //<![CDATA[ 值 ]]> 过滤符号 //${}方式

Mybatis传递多个参数进行SQL查询的用法

PS:ibatis3如何传递多个参数有两个方法:一种是使用java.Map,另一种是使用JavaBean. 当只向xxxMapper.xml文件中传递一个参数时,可以简单的用"_parameter"来接收xxxMapper.java传递进来的参数,并代入查询,比如说这样: (1)xxxMapper.java文件中这样定义: List<String> selectAllAirportCode(Boolean mapping); (2)这时在对应的xxxMapper.xml文件

Mybatis参数传递示例代码

前言 在实际开发中,大多数情况下都需要对 SQL 传入参数以获得想要的结果集,传入的情况分为两种情况: 1.SQL语句的拼接,比如表名.like 条件等;在 mybatis 中使用 ${} 包裹参数,mybati 直接对其进行字符串替换 2.SQL 中作为条件输入的参数,这种情况下,SQL 允许使用 ? 作为占位符来代替参数,在 mybatis 中使用 #{} 包裹参数,使用占位符有以下几点好处: mybatis 会对包裹的变量进行转义和类型检查,避免以 SQL 注入的方式攻击数据库 默认情况下

Mybatis中传递多个参数的4种方法总结

前言 现在大多项目都是使用Mybatis了,但也有些公司使用Hibernate.使用Mybatis最大的特性就是sql需要自己写,而写sql就需要传递多个参数.面对各种复杂的业务场景,传递参数也是一种学问. 下面给大家总结了以下几种多参数传递的方法. 方法1:顺序传参法 #{}里面的数字代表你传入参数的顺序. 这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错. 方法2:@Param注解传参法 #{}里面的名称对应的是注解 @Param括号里面修饰的名称. 这种方法在参数不多的情况还

Spring Boot整合mybatis使用注解实现动态Sql、参数传递等常用操作(实现方法)

前面介绍了Spring Boot 整合mybatis 使用注解的方式实现数据库操作,介绍了如何自动生成注解版的mapper 和pojo类. 接下来介绍使用mybatis 常用注解以及如何传参数等数据库操作中的常用操作. 其实,mybatis 注解方式 和 XML配置方式两者的使用基本上相同,只有在构建 SQL 脚本有所区别,所以这里重点介绍两者之间的差异,以及增删改查,参数传递等注解的常用操作. 详解SpringBoot 快速整合Mybatis(去XML化+注解进阶)已经介绍过了,不清楚的朋友可

MyBatis3传递多个参数(Multiple Parameters)

传递多个参数一般用在查询上,比如多个条件组成的查询,有以下方式去实现: 版本信息: MyBatis:3.4.4 1.自带方法 <select id="getUserArticlesByLimit" resultMap="resultUserArticleList"> select user.id,user.userName,user.userAddress,article.id as aid,article.title,article.content f

thinkphp中html:list标签传递多个参数实例

本文实例讲述了关于thinkphp中html:list标签传多个参数问题解决办法,分享给大家供大家参考.具体分析如下: 此改动 针对thinkphp 2.0 版本有效,thinkphp 3.0 版本 未测试. 主要修改这个文件 /Thinkphp/Lib/Think/Template/Taglib/TabLibHtml.class.php 的 _list 方法 注释有新增内容的代码部分是新增加的 主要通过 -- 分割多个参数(会自动替换为,) 复制代码 代码如下: public function

ajax传递多个参数的实现代码

本文实例为大家分享了ajax传递多个参数的具体代码,供大家参考,具体内容如下 <html > <head> <title></title> <script src="js/Jquery1.7.js" type="text/javascript"></script> <script type="text/javascript"> $(function () { $(

C#向线程中传递多个参数的解决方法(两种)

问题: 对于多线程编程,很多时候往往需要向线程中传递多个参数,而C#中的线程只接收1个object类型的参数(如下): Thread t = new Thread(new ParameterizedThreadStart(newthread)); t.start(参数); void newthread(object) { ............. } 而现在需要往线程中传递多个参数,比如method方法想用单独的线程来跑 void method(int begin,int end) { ...

Kotlin传递可变长参数给Java可变参数实例代码

本文研究的主要是Kotlin传递可变长参数给Java可变参数的方法,具体实现代码如下. 定义Java可变参数方法 package com.tcl.john.studymvvm.utils; /** * 调用Java方法的工具类 * Created by ZhangJun on 2017/10/25. */ public class CallJavaUtils { public static int addNumbers(String name, int... args) { int result

spirngmvc js传递复杂json参数到controller的实例

Spring MVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype (MIME编码)是application/json,因此发送POST请求时需要设置请求报文头信息,否则Spring MVC在解析集合请求参数时不会自动的转换成JSON数据再解析成相应的集合. 以下列举接收List<String>.List<User>.List<Map<String,Object>&