欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mybatis传入多个参数Lis(Map(String,Object))type handler was null on parameter mapping for property

程序员文章站 2022-03-08 17:23:54
...

报错

Parameter 'id' not found. Available parameters are [collection, list]
Type handler was null on parameter mapping for property

mybatis不能直接使用select in语法,需要借助foreach实现传入参数的遍历。

list形式传入参数有三种

1.String[] strs,2.List<User> users, 3.List<Map<String, Object>> maps, 

三种方式差不多,主要以第三种为例。mybatis传入多个参数Lis(Map(String,Object))type handler was null on parameter mapping for property

mapper.xml文件中涉及使用list属性值有id, parameterType, resultType, collection, open, close,item, index, separator.

id对应接口中方法名,resultType为返回参数类型

parameterType为传入参数类型,mybatis有别名机制,这里可以设置为"list"

collection属性值:如果为以上1.数组形式,collection值为"array", 如果为2.实体类,或者3.map形式,collection值为"list",

接下来对应foreach方法解释值。 java 中foreach 用法为   for(Map map : maps) {     }

open是语句的开始,close是语句的结束,在下面的例子中体现,mybatis传入多个参数Lis(Map(String,Object))type handler was null on parameter mapping for property

index记录迭代到的位置,可以设置为"index"

separator表示每次循环以什么符号为分隔符,设置为","

item是每次循环访问到值的临时名,相当于上式foreach中的map,注意,其中的参数要用map.key来访问,如下例中tempmap.id, 如果直接用key(例子中的id)访问,

就会报Parameter 'id' notfound. Available parameters are [collection, list]错误mybatis传入多个参数Lis(Map(String,Object))type handler was null on parameter mapping for property

数组与实体类都是类似的。mybatis传入多个参数Lis(Map(String,Object))type handler was null on parameter mapping for property

下面是一个例子:

接口类

List<User> selectByList(List<Map<String, Object>> list);
xml文件
<select id="selectByList" parameterType="list" resultType="user">
  select id, name from User
  <where>
   <if test="list!=null and list.size>0">
    and id in
    <foreach collection="list" open="(" close=")" item="tempmap" index="index" separator=",">
     #{tempmap.id}
    </foreach>
   </if>
  </where>
 </select>