mybatis传入多个参数Lis(Map(String,Object))type handler was null on parameter mapping for property
报错
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,
三种方式差不多,主要以第三种为例。
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是语句的结束,在下面的例子中体现,
index记录迭代到的位置,可以设置为"index"
separator表示每次循环以什么符号为分隔符,设置为","
item是每次循环访问到值的临时名,相当于上式foreach中的map,注意,其中的参数要用map.key来访问,如下例中tempmap.id, 如果直接用key(例子中的id)访问,
就会报Parameter 'id' notfound. Available parameters are [collection, list]错误
数组与实体类都是类似的。
下面是一个例子:
接口类
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>