我試圖在由IN子句組成的SELECT QUERY中傳遞多個值。我想執行以下查詢使用的MyBatis:使用mybatis註釋在IN子句中傳遞多個值
SELECT * FROM DBA_COMPARISON_ROW_DIF WHERE SCAN_ID in (#{childScanIDs})
其中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);
我構建值的字符串是這樣的:
String scanIDs = StringUtils.join(cmp.getChildScanIDs(), ",");
當執行功能,它提出這個例外。
### 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
任何幫助,將不勝感激。我認爲問題在於mybatis沒有將這些值視爲單獨的數字。另一種解決方案是對每個數字執行查詢,但我想一次傳遞所有值。 在此先感謝。
謝謝。我試過這個解決方案,但它給了我錯誤:###錯誤查詢數據庫。原因:org.apache.ibatis.type.TypeException:設置null參數時出錯。大多數JDBC驅動程序要求必須爲所有可空參數指定JdbcType。原因:java.sql.SQLException:列類型無效:1111 – gla315
@ gla315嘗試告訴mybatis哪個類型的項目是:用##項目中的#{item,jdbcType = INTEGER}替換'#{item}' – BackSlash
試過了,但它給我無效的SQL語句。這是查詢:@Select({ 「「}) – gla315