도담이 먹여 살려야하는 집사

Spring JDBC Template 본문

카테고리 없음

Spring JDBC Template

천재도담 2020. 11. 5. 23:47

데이터베이스에 연결하고 SQL 쿼리를 실행하는 강력한 메커니즘. 내부적으로 JDBC API를 사용하지만 이에 관련한 많은 문제를 제거함.

 

JDBC API의 문제점 

  • 연결 생성, 명령문, 결과 집합 닫기, 열결 등과 같은 퀴리 실행 전후 많은 코드를 작성해야 함.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
//드라이버 로드하고 connection 객체 사용하는거 예제 코드 작성해서 올리기 
  • 데이터베이스 로직에서 예외 처리 코드를 수행해야 함. 
  • Handle Transaction이 필요함.
  • 이런 모든 코드를 하나에서 다른 데이터베이스 로직으로 반복하는 작업은 효율성이 떨어짐. 
//db쿼리 실행하는 메소드 예제코드 올리기 

위 코드를 보면 계속해서 DB 연결해주고 JDBC 드라이버를 로드하는 코드를 반복적으로 사용함 또는 DBUtil 클래스를 따로 만들어 관리해주는 방법도 있었음. 

//DBUtil로 Connection 객체와 JDBC드라이버 자원을 따로 관리해줌.
import java.sql.*;

public class DBUtil {
    public static Connection getConnection(){

        return getConnection("jdbc:mysql://localhost:3306/Guestbook?serverTimezone=Asia/Seoul",
                "root","1010");
    }

    private static Connection getConnection(String dbURL, String dbId, String dbPassword){
        Connection conn;
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(dbURL, dbId, dbPassword);
            return conn;
        }catch(Exception ex){
            throw new RuntimeException("Connection Error");
        }
    }
}

Spring JDBC는 이런 JDBC API를 내부적으로 사용하고 있지만 위와 같은 문제점은 제거하고 쿼리를 직접 작성하는 방법을 제공하여 많은 작업과 시간을 절약할 수 있음. 


Spring JDBC 접근

  • JdbcTemplate
  • NamedParameterJdbcTemplate
  • SimpleJdbcTemplate
  • SimpleJdbcInsert and SimpleJdbcCall

JdbcTemplate class

연결 객체의 생성 및 닫기 등 자원의 생성과 해제를 처리하여 연결을 끊는 것을 잊었을 때 문제가 되지 않음. 

예외를 처리하고 org.springframework.dao 패키지에 정의된 예외 클래스의 도움으로 예외 메시지의 정보를 제공.

모든 데이터베이스 작업을 수행할 수 있음. 

  • SQL 쿼리 실행
  • 업데이트 문장과 저장 프로시저를 호출함.
  • ResultSet인스턴스에 대한 반복 및 리턴 된 매개변수 값을 추출

JDBCTemplate클래스의 인스턴스는 일단 구성되면 스레드로부터 안전 >> JDBCTemplate의 단일 인스턴스를 구성한 다음 공유 참조를 여러DAO (또는 저장소)에 안전하게 삽입 할 수 있다는 것을 의미하기에 중요함. 

 

 

Data Access Layer 

[이미지 출처 : gmlwjd9405.github.io/2018/12/19/jdbctemplate-usage.html]

 

[Spring JDBC] JdbcTemplate의 기본 사용법 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

Comments