如何在IBatis 2中为带有Parameterclass Map的SQL Update或SQL Select语句创建S



我在使用IBatis框架时遇到了一些问题。我使用IBatis 2,现在我尝试执行SQL选择和SQL更新语句,该语句使用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 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.

我该如何解决这个问题?

非常感谢!

查看iBatis xml,您的filterData标记似乎不正确。应该是:

<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>

最新更新