![](/img/trans.png)
[英]How to use a list of string in NamedParameterJDBCTemplate to get results
[英]How to use NamedParameterJdbcTemplate for batch inserts
我正在使用spring NamedParameterJdbcTemplate將記錄批量插入數據庫表中。
CREATE TABLE test (x number);
我的存儲庫類是這樣的:
@Repository
public class TestRepository {
private static final String TEMP_INSERT = "INSERT INTO test(x) VALUES (:x)";
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public int batchTestInsert(SqlParameterSource[] parameters) {
return Arrays.stream(
namedParameterJdbcTemplate.batchUpdate(TEMP_INSERT, parameters)
).sum();
}
}
可以正確執行插入操作,但是返回的結果是意外的負值-6。 這是因為返回的數組中的每個元素namedParameterJdbcTemplate
等於-2。
我的問題是我是否誤解了使用此Spring模板的方式,或者是Spring Bug(難以置信)。 如果我沒有正確使用它,那將是正確的方法。
這是重現此問題的單元測試:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=MyConfiguration.class)
public class TestRepositoryTest {
@Autowired
private TestRepository repository;
@Test
public void shoudReturnTheNumberOfInsertedRecords() {
assertEquals(3, repository.batchTestInsert(new SqlParameterSource[] {
new MapSqlParameterSource("x", 1),
new MapSqlParameterSource("x", 2),
new MapSqlParameterSource("x", 3)
}));
}
}
java.lang.AssertionError:
Expected :3
Actual :-6
<Click to see difference>
如果使用的是Oracle數據庫,則-2表示SQL語句已成功執行,但是有關受影響的確切行的信息不可用( ExecuteBatch方法在Java中返回值-2的數組 )
要測試插入了多少行,可以使用namedJdbcTemplate
執行SELECT
語句並檢查其結果。
你需要注入
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
進入測試類,然后使用它來查詢數據庫。
Integer count = namedParameterJdbcTemplate.queryForObject("SELECT COUNT(1) FROM test", new HashMap<String, Object>, Integer.class); //I pass empty HashMap since query doesn't need parameters
assertEquals(3, count);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.