java - 如何在 MYBatis 2 中为带有参数类映射的 SQL Update 或 SQL Select 语句创建 SQL In 子句

标签 java sql ibatis

我在使用 IBatis 框架时遇到了一些问题。我使用 IBatis 2,现在尝试执行 SQL select 和 SQL update 语句,该语句与参数类“java.util.Map”和 IBatis 迭代器标记一起使用。但现在看来,这两个组件不能一起工作。

如果我在 SQL select 语句中仅使用带有 IBatis Iterator 标记的 Java 列表,则它可以正常工作。

如果我在 SQL 更新语句中仅使用带有 IBatis Iterator 标记的 Java 列表,则它不起作用。

有必要使用 Java Map 作为参数类,因为我在 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!!",<br/> WHERE myTable.id IN <iterate open="(" close=")" conjunction=","> #filterData[]# </iterate><br/> </update>

关于java - 如何在 MYBatis 2 中为带有参数类映射的 SQL Update 或 SQL Select 语句创建 SQL In 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28343006/

相关文章:

java - 尝试通过 Java 库连接时 Jenkins 连接失败

MySQL 从 INT 列中选择

sql - 如何从 postgresql 中的查询返回 sql 数据类型?

java - Spring中不同数据库的数据库连接

ibatis - iBATIS 中的无限刷新间隔

java - 使用 mybatis 保存/更新集合,常见的做法是什么?

java - super() 如何在构造函数中工作

java - ConcurrentHashMap 的迭代一致性保证

java - 如何使用 Java 并发原语实现阻塞请求-回复?

mysql - 如何从今天开始每 3 小时对 MySQL 中的数据进行分组?