Mới đến mùa xuân, tôi đang cố gắng chèn một List<Map<String, Object>>
vào một bảng. Cho đến bây giờ tôi đã sử dụng SqlParameterSource
để cập nhật hàng loạt, hoạt động tốt khi một hạt java được cung cấp cho chúng. Một cái gì đó như thế này:Làm thế nào để thực hiện cập nhật hàng loạt trong mùa xuân với một danh sách các bản đồ?
@Autowired
private NamedParameterJDBCTemplate v2_template;
public int[] bulkInsertIntoSiteTable(List<SiteBean> list){
SqlParameterSource[] batch = SqlParameterSourceUtils
.createBatch(list.toArray());
int[] updateCounts = v2_template
.batchUpdate(
"insert into sitestatus (website, status, createdby) values (:website, :status, :username)",
batch);
return updateCounts;
}
Tuy nhiên, tôi đã thử kỹ thuật tương tự với danh sách bản đồ thay cho đậu, không thành công (đúng như vậy).
public int[] bulkInsertIntoSiteTable(List<Map<String, Object>> list){
SqlParameterSource[] batch = SqlParameterSourceUtils
.createBatch(list.toArray());
int[] updateCounts = v2_template
.batchUpdate(
"insert into sitestatus (website, status, createdby) values (:website, :status, :username)",
batch);
return updateCounts;
}
Đoạn mã trên thất bại với các ngoại lệ sau đây:
Exception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: No value supplied for the SQL parameter 'website': Invalid property 'website' of bean class [org.springframework.util.LinkedCaseInsensitiveMap]: Bean property 'website' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
at org.springframework.jdbc.core.namedparam.NamedParameterUtils.buildValueArray(NamedParameterUtils.java:322)
at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils$1.setValues(NamedParameterBatchUpdateUtils.java:45)
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:893)
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:1)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:587)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:615)
at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:884)
at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils.executeBatchUpdateWithNamedParameters(NamedParameterBatchUpdateUtils.java:40)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(NamedParameterJdbcTemplate.java:303)
at tester.utitlies.dao.VersionTwoDao.bulkInsertIntoSites(VersionTwoDao.java:21)
at tester.utitlies.runner.Main.main(Main.java:28)
Nó bị hỏng vì nó coi danh sách để có một loạt các loại đậu, tôi đoán. Tôi không thể tìm cách thực hiện cập nhật hàng loạt trong Spring bằng danh sách bản đồ và sử dụng NamedParameterJDBCTemplate
. Làm ơn cho lời khuyên.
Tại sao chúng có 'Bản đồ [] batchValues' và không phải MapValues [] batchValues? –
fastcodejava
Đã thành công khi thực hiện theo cách này: Bản đồ [] batchValues = list.toArray (new HashMap [0]); có tênParameterJdbcTemplate.batchUpdate ("...", batchValues); –