복붙노트

[SPRING] 여러 데이터베이스 작업에 Spring JdbcTemplate 사용

SPRING

여러 데이터베이스 작업에 Spring JdbcTemplate 사용

나는 JdbcTemplate의 겉보기 단순함을 좋아하지만 어떻게 작동하는지 조금 혼란 스럽다. 각 작업 (query () 또는 update ())은 데이터 소스에서 연결을 가져 와서 닫습니다.

그렇지만 동일한 연결 내에서 여러 SQL 쿼리를 어떻게 수행합니까?

순차적으로 여러 작업을 수행 할 수도 있습니다 (예를 들어 SELECT 다음에 INSERT와 커밋이 뒤 따르는 경우). 또는 중첩 쿼리 (SELECT)를 수행하고 각 행의 결과를 기반으로 두 번째 SELECT를 수행 할 수 있습니다.

JdbcTemplate으로 어떻게 할 수 있습니까? 올바른 수업을 듣고 있습니까?

해결법

  1. ==============================

    1.정답은 "거래 사용"입니다. 트랜잭션을 시작한 다음 JdbcTemplate을 사용하여 여러 작업을 수행하면 해당 작업 각각이 트랜잭션의 범위 내에 있으므로 동일한 연결을 사용하도록 보장됩니다.

    정답은 "거래 사용"입니다. 트랜잭션을 시작한 다음 JdbcTemplate을 사용하여 여러 작업을 수행하면 해당 작업 각각이 트랜잭션의 범위 내에 있으므로 동일한 연결을 사용하도록 보장됩니다.

    트랜잭션에 관여하고 싶지 않다면, execute (ConnectionCallback action)와 같은 JdbcTemplate에서보다 원시적 인 연산을 사용하는 것입니다. Connection은 Connection이 주어진 ConnectionCallback의 인스턴스를 제공합니다. 선택한 모든 작업을 수행하십시오. 물론,이 작업을 수행하면 실제 작업에서 JdbcTemplate의 도움을받지 못합니다.

    트랜잭션은 Spring에서 매우 쉽습니다. 사용법을 살펴보아야합니다 (위의 링크 참조).

  2. ==============================

    2.거래를 원한다고 생각하니? 그렇다면 Spring, JdbcTemplate 및 Transactions를 살펴보십시오.

    거래를 원한다고 생각하니? 그렇다면 Spring, JdbcTemplate 및 Transactions를 살펴보십시오.

    한 가지 덧붙이 자면, 나는 Ibatis를 살펴볼 것을 제안합니다. Spring JDBC는 편리하게 보일지 모르겠지만 큰 문제점이있다. 객체에 대한 결과 세트의 기본 매핑은 Spring 클래스를 사용하는데, 이는 큰 결과 세트를 다룰 때 실제로 느리다. 이러한 쿼리에 대한 자신의 행 매퍼를 작성하여이 문제를 해결할 수 있지만 개인적으로 이런 종류의 상용구를 작성하고 싶지는 않습니다.

    차이점의 예를 들어 보자. 손으로 코딩 된 행 매퍼로 2 초가 걸리는 Spring 리플렉션 기반 행 매퍼로 한 쿼리에 50 초가 걸렸다.

    또한 Spring JDBC는 인라인 SQL을 사용한다. Java에서 이것은 Java가 (annoyingly) 좋은 다중 행 문자열 형식을 가지고 있지 않기 때문에 상당히 추악합니다.

  3. from https://stackoverflow.com/questions/2564128/using-spring-jdbctemplate-for-multiple-database-operations by cc-by-sa and MIT license