[SPRING] 지도 목록으로 Spring에서 배치 업데이트를 수행하는 방법은 무엇입니까?
SPRING지도 목록으로 Spring에서 배치 업데이트를 수행하는 방법은 무엇입니까?
새로운 스프링에 List
@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;
}
그러나 빈 대신에 맵 목록을 사용하여 동일한 기술을 시도했지만 실패했습니다 (맞습니다).
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;
}
위의 코드는 다음 예외로 인해 실패했습니다.
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)
목록을 빈의 일괄 처리로 간주하기 때문에 실패합니다. 맵 목록과 NamedParameterJDBCTemplate을 사용하여 Spring에서 일괄 업데이트를 수행하는 방법을 찾을 수 없습니다. 제발 조언.
해결법
-
==============================
1.Spring NamedParameterJDBCTemplate 문서에서 볼 수 있듯이,이 메소드는 맵을 사용하여 배치를 업데이트하는 데 사용할 수 있습니다.
Spring NamedParameterJDBCTemplate 문서에서 볼 수 있듯이,이 메소드는 맵을 사용하여 배치를 업데이트하는 데 사용할 수 있습니다.
int [] batchUpdate (String sql, Map
[] 배치 값) 실제 과제는 해당 List
public static Map<String, Object>[] getArrayData(List<Map<String, Object>> list){ @SuppressWarnings("unchecked") Map<String, Object>[] maps = new HashMap[list.size()]; Iterator<Map<String, Object>> iterator = list.iterator(); int i = 0; while (iterator.hasNext()) { Map<java.lang.String, java.lang.Object> map = (Map<java.lang.String, java.lang.Object>) iterator .next(); maps[i++] = map; } return maps; }
-
==============================
2.나는 코드로 테스트했다.
나는 코드로 테스트했다.
Map<String, Object>[] rs = new Map<String, Object>[1]; Map<String, Object> item1 = new HashMap<>(); item1.put("name", "Tien Nguyen"); item1.put("age", 35); rs[0] = item1; NamedParameterJdbcTemplate jdbc = new NamedParameterJdbcTemplate(datasource); // datasource from JDBC. jdbc.batchUpdate("call sp(:name, :age)", rs);
희망은 알기 쉽다. 감사
from https://stackoverflow.com/questions/17422674/how-to-perform-batch-update-in-spring-with-a-list-of-maps by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring을 멈춘다 일정 시간이 지나면 멈춘다. (0) | 2019.02.13 |
---|---|
[SPRING] 스프링 데이터 JPA 감사를 orm.xml 파일없이 (JavaConfig를 대신 사용하여) 사용할 수 있습니까? (0) | 2019.02.13 |
[SPRING] 스프링 레스트 컨트롤러는 특정 필드를 반환합니다. (0) | 2019.02.13 |
[SPRING] Spring : @Qualifer를 Java 구성 Bean에 첨부 (0) | 2019.02.13 |
[SPRING] 스프링 JPA 공급 업체 어댑터를 사용하여 최대 절전 모드에서 SQL을 표시하지 못하게 함 (0) | 2019.02.13 |