Mybatis foreach集合是地图参数中的列表 [英] Mybatis foreach collection is a list in a map-parameter
问题描述
我正在使用mybatis 3.2.8版本.
I'm using mybatis 3.2.8 version.
Mapper.java
Mapper.java
List<BuddyId> findBuddyIds(HashMap<String, Object> map);
xml
<select id="findBuddyIds" parameterType="map" resultMap="BuddyIdResultMap">
select *
from seerid.buddyIds
where id REGEXP
<foreach collection="idSplits" item="item" index="index" open="'" close="'" separator="|">
#{item}
</foreach>
</select>
Controller.java
Controller.java
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("idSplits", new ArrayList<String>(Arrays.asList(idSplits)));
buddyScanResult = seerIdDAO.findBuddyIds(map);
它将收到以下错误.
查询数据库时出错.原因:java.sql.SQLException:无法设置参数
错误可能存在于文件[/Users/jylee/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/services/WEB-INF/classes/com/ohinc /services/seerid/mybatis/SeerIdMapper.xml]
该错误可能涉及com.ohinc.services.seerid.mybatis.SeerIdMapper.findBuddyIds-Inline
设置参数时发生错误
SQL:从seerid.buddyIds中选择*,其中id REGEXP'吗? | ?
原因:java.sql.SQLException:无法设置参数;未分类的SQLException for SQL []; SQL状态[null];错误代码
[0];无法设置参数;嵌套的异常是 java.sql.SQLException:无法设置参数]的根本原因 org.mariadb.jdbc.internal.common.query.IllegalParameterException:否 '?'在那个位置 org.mariadb.jdbc.internal.common.query.MySQLParameterizedQuery.setParameter(MySQLParameterizedQuery.java:103)
Error querying database. Cause: java.sql.SQLException: Could not set parameter
The error may exist in file [/Users/jylee/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/services/WEB-INF/classes/com/ohinc/services/seerid/mybatis/SeerIdMapper.xml]
The error may involve com.ohinc.services.seerid.mybatis.SeerIdMapper.findBuddyIds-Inline
The error occurred while setting parameters
SQL: select * from seerid.buddyIds where id REGEXP ' ? | ? '
Cause: java.sql.SQLException: Could not set parameter ; uncategorized SQLException for SQL []; SQL state [null]; error code
[0]; Could not set parameter; nested exception is java.sql.SQLException: Could not set parameter] with root cause org.mariadb.jdbc.internal.common.query.IllegalParameterException: No '?' on that position at org.mariadb.jdbc.internal.common.query.MySQLParameterizedQuery.setParameter(MySQLParameterizedQuery.java:103)
我不知道如何解决这个问题.
I don't know how to solve this problem.
请帮助我.
推荐答案
我发现了这个问题,可能是可以解决这个问题的. 您的xml有一个错误:
I found this problem, may be can solve this question. you xml have a mistake:
<select id="findBuddyIds" parameterType="map" resultMap="BuddyIdResultMap">
select *
from seerid.buddyIds
where id REGEXP
<foreach collection="idSplits" item="item" index="index" open="'" close="'" separator="|">
${item}
</foreach>
</select>
您应该在foreach中使用$ replace#.
you should be use $ replace # in foreach.
具有条件IN的MyBatis问题<在地图中使用列表进行foreach
这篇关于Mybatis foreach集合是地图参数中的列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!