使用IBatis框架我遇到了一些问题。我使用IBatis 2,现在我尝试执行SQL select和SQL update语句,它使用parameterClass“java.util.Map”和IBatis迭代器标记。但现在看来,这两个组件并不一致。
如果我在SQL select语句中只使用带有IBatis Iterator标记的Java List,它可以正常工作。
如果我在SQL更新语句中仅使用带有IBatis Iterator标记的Java List,则它不起作用。
有必要使用Java Map作为parameterClass,因为我需要在SQL语句中包含多个参数。
现在我创建了以下ArrayList“filterData”,它将包含在HashMap“myMap”中:
List<Long> filterData = new ArrayList<Long>();
filterData.add(11L);
filterData.add(22L);
filterData.add(33L);
HashMap<String, Object> myMap = new HashMap<String, Object>();
myMap.put("mySchema", "Schema1");
myMap.put("filterData", filterData);
以下java代码将执行IBatis SQL select语句:
Long selectedValues = (Long) getSqlMapClientTemplate().queryForObject("selectWithMap", myMap)
这是我的IBatis SQL select语句:
<select id="selectWithMap" resultClass="long" parameterClass="java.util.Map">
SELECT COUNT(*)
FROM $mySchema$.myTable
WHERE myTable.id IN
<iterate open="(" close=")" conjunction=",">
#[filterData]#
</iterate>
</select>
以下java代码将执行IBatis SQL更新语句:
Integer updatedValues = (Integer) getSqlMapClientTemplate().update("updateWithMap", myMap);
这是我的IBatis SQL更新声明:
<update id="updateWithMap" parameterClass="java.util.Map">
UPDATE $mySchema$.myTable
SET myTable.name = "Something!!",
WHERE myTable.id IN
<iterate open="(" close=")" conjunction=",">
#[filterData]#
</iterate>
</update>
我收到此错误消息:
Check the parameter map.
Cause: com.ibatis.sqlmap.client.SqlMapException: ParameterObject or property was not a Collection, Array or Iterator.
我该如何解决这个问题?
非常感谢!
答案 0 :(得分:2)
查看myBatis xml,看起来您的过滤器数据标记不正确。它应该是:
<update id="updateWithMap" parameterClass="java.util.Map">
UPDATE $mySchema$.myTable
SET myTable.name = "Something!!",
WHERE myTable.id IN
<iterate open="(" close=")" conjunction=",">
#filterData[]#
</iterate>
</update>