问题描述:
需求是传入String数组进行查询,于是想使用in foreach。一开始是这样写的
<select id="findByMutilClientType" resultType="com.yealink.version.pojo.Version" parameterType="java.util.List">
SELECT * FROM version v
WHERE v.clientType IN
<foreach collection="array" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
ORDER BY v.publishTime DESC ;
</select>
// 根据clientType查询version,可多个clientType
List<Version> findByMutilClientType(@Param("item") String[] clientType);
报错如下:
Mybatis报错:Parameter 'array' not found. Available parameters are [item, param1]
原因是起初我在网上看in foreach的写法,说foreach中的collection应该根据传进来的参数类型来写,比如我是穿String数组,那就应该写成array,但是我在Dao方法用@parm绑定了参数名字,这样就会报错。
解决方法:
修改foreach中的collection,改为clientType,全部统一最好,绝不会错。
<select id="findByMutilClientType" resultType="com.yealink.version.pojo.Version" parameterType="java.util.List">
SELECT * FROM version v
WHERE v.clientType IN
<foreach collection="clientType" index="index" item="clientType" open="(" separator="," close=")">
#{clientType}
</foreach>
ORDER BY v.publishTime DESC ;
</select>
// 根据clientType查询version,可多个clientType
List<Version> findByMutilClientType(@Param("clientType") String[] clientType);