gla*_*315 0 java database oracle annotations mybatis
我试图在由 IN 子句组成的 SELECT QUERY 中传递多个值。我想使用 mybatis 执行以下查询:
SELECT * FROM DBA_COMPARISON_ROW_DIF WHERE SCAN_ID in (#{childScanIDs})
Run Code Online (Sandbox Code Playgroud)
其中childScanIDs变量由多个逗号分隔的值组成。我将这些值作为由逗号分隔的所有值组成的字符串传递。下面是映射器接口中使用的方法。
@Select(getDifferencesByScanIDs)
@Results({
@Result(property="owner", column="OWNER"),
@Result(property="comparisonName", column="COMPARISON_NAME"),
@Result(property="scanID", column="SCAN_ID"),
@Result(property="localRowID", column="LOCAL_ROWID"),
@Result(property="remoteRowID", column="REMOTE_ROWID"),
@Result(property="indexValue", column="INDEX_VALUE"),
@Result(property="status", column="STATUS"),
@Result(property="lastUpdateTime", column="LAST_UPDATE_TIME")
})
List<Difference> getDifferencesByScanIDs(@Param("childScanIDs") String childScanIDs);
Run Code Online (Sandbox Code Playgroud)
我正在以这种方式构造值字符串:
String scanIDs = StringUtils.join(cmp.getChildScanIDs(), ",");
Run Code Online (Sandbox Code Playgroud)
执行该函数时,它会引发此异常。
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-01722: invalid number
### The error may involve com.rs2.automation.soacomparison.dao.differences.DifferencesMapper.getDifferencesByScanIDs-Inline
### The error occurred while setting parameters
### Cause: java.sql.SQLSyntaxErrorException: ORA-01722: invalid number
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激。我认为问题在于 mybatis 没有将这些值识别为单独的数字。另一种解决方案是对每个数字执行查询,但我想一次传递所有值。提前致谢。
SELECT * FROM DBA_COMPARISON_ROW_DIF WHERE SCAN_ID in (#{childScanIDs})
Run Code Online (Sandbox Code Playgroud)
如果我们想象一个像 的列表2, 13, 15, 16,这个查询将导致:
SELECT * FROM DBA_COMPARISON_ROW_DIF WHERE SCAN_ID in ('2,13,15,16')
Run Code Online (Sandbox Code Playgroud)
如您所见,该值被视为String而不是列表,这不是您所需要的。
我将传递cmp.getChildScanIDs()给 mybatis,而不将其转换为字符串,并使用 mybatis 的动态 sql。
将方法编辑为:
List<Difference> getDifferencesByScanIDs(@Param("childScanIDs") List<Integer> childScanIDs); // or int[]
Run Code Online (Sandbox Code Playgroud)
将查询编辑为:
SELECT * FROM DBA_COMPARISON_ROW_DIF WHERE SCAN_ID in
<foreach item="item" index="index" collection="childScanIDs" open="(" separator="," close=")">
#{item}
</foreach>
Run Code Online (Sandbox Code Playgroud)
它能做什么:
参考链接:MyBatis Dynamic SQL
| 归档时间: |
|
| 查看次数: |
14991 次 |
| 最近记录: |