ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] JdbcTemplate의 기본
    Spring 2024. 4. 19. 22:44

    Spring에서 SQL을 사용할때 JdbcTemplate는 간단하면서 좋은 선택지이다. JdbcTemplate은 트랜잭션 관리 및 리소스 관리등을 자동으로 해주는 등 매우 편리하게 JDBC를 사용할 수 있게 도와준다.

     

     

    Jdbc Template이란?

    • JdbcTemplate은 JDBC 코어 패키지의 중앙 클래스로 JDBC의 사용을 단순화하고 일반적인 오류를 방지하는데 도움이 된다. 개발자가 JDBC를 직접 사용할 때 발생하는 다음과 같은 반복 작업을 대신 처리해준다.

     

    JdbcTemplate을 사용하는 이유

    • JdbcTemlate룰 사용하지 않은 기존의 방법
    @Override
        public Member save(Member member) {
            String sql = "INSERT INTO MEMBER(member_id, money) VALUES (?, ?)";
    
            Connection con = null;
            PreparedStatement pstmt = null;
    
            try {
                con = getConnection();
                pstmt = con.prepareStatement(sql);
                pstmt.setString(1, member.getMemberId());
                pstmt.setInt(2, member.getMoney());
                pstmt.executeUpdate();
                return member;
            } catch (SQLException e) {
                throw exceptionTranslator.translate("save", sql, e);
            } finally {
                // TCP/IP 커넥션으로 연결되기 때문에 자원 해제해줘야 함
                close(con, pstmt, null); // 현재 코드에는 없지만 자원을 해제해주는 사용자 정의 메서드
            }
        }

     

    • save() 뿐만 아니라 DB에 접근하는 모든 메서드에서 Connection을 가져오고, PreparedStatement를 가져와서 sql을 수행하고 자원을 해제해주는 로직을 작성해 주어야 한다.
    • 중복 코드가 난무하고 너무 복잡하다

     

    • JdbcTemplate 사용
    		...
            private final JdbcTemplate template;		
            public MemberRepository(DataSource dataSource) {
            	this.template = new JdbcTemplate(dataSource);
        	}
    		...
     
    		@Override
       		public Member save(Member member) {
                String sql = "INSERT INTO MEMBER(member_id, money) VALUES (?, ?)";
                template.update(sql, member.getMemberId(), member.getMoney());
            return member;
        }
    • JdbcTemplate을 사용하지 않은 코드보다 사용한 코드가 훨씬 간단해졌다.
    • JdbcTemplate을 사용하면 사용하지 않는 자원(커넥션 등)을 자동으로 해지해준다.

    JdbcTemplate의 장점

    • 설정이 편리함
      -spring-jdbc 라이브러리에 포함되어 있기 때문에 jdbc를 사용한다면 기본적으로 사용할 수 있다.
      • 반복 문제 해결
        -JdbcTemplate은 템플릿 콜백 패턴을 사용해서, JDBC를 직접 사용할 때 발생하는 대부분의 반복작업을 대신 처리해준다.
        -개발자는 SQL을 작성하고, 전달할 파라미터를 정의하고, 응답 값을 매핑하기만 하면 된다.
        -우리가 생각할 수 있는 대부분의 반복 작업을 대신 처리해준다.
            ▫️ 커넥션 획득
            ▫️ statement를 준비하고 실행
            ▫️ 결과를 반복하도록 루프를 실행
            ▫️ 커넥션 종료, statement, resultset 종료
            ▫️ 트렌잭션 다루기 위한 커넥션 동기화

            ▫️ 예외 발생시 스프링 예외 변환기 실행

     

    JdbcTemplate의 단점

    • 동적 쿼리문을 해결하기 어렵다

    단점을 해결하기위해

    • 동적 쿼리문의 수얼한 작성을 위해 다른 DB 접근 기술을 사용할수있다.
    • 예를 들어 MyBatis와 JPA + QueryDSL 을 사용할 수 있다.

     

     

kimjihoon