본문 바로가기

spring

JdbcTemplate

JDBC API를 사용했을 때 불편한 부분
  • 반복되는 코드
  • 연결부터 자원의 반납까지 모든 부분의 관리 필요
  • 예외처리로 인해서 코드 복잡도 상승

 

JdbcTemplate
  • Spring에서 개발자가 JDBC를 쉽게 사용할 수 있도록 도와주는 클래스
  • JDBC 코어 패키지의 중앙 클래스
  • JDBC와 같은 라이브러리로 사용 가능
    • implementation 'org.springframework.boot:spring-boot-starter-jdbc'

 

JdbcTemplate을 사용하면 해결되는 부분
  • 구조적인 반복 해결
  • 손쉬운 Transaction 처리
  • 쉽게 자바 객체로 매핑 가능

 

구조적인 반복 해결
  • JDBC API를 사용할 때 요청 시 다음 과정이 진행됨
    • try-catch 문 생성
    • Connection 획득 / 종료
    • Statement 준비 / 실행 / 종료
    • 결과를 가져오기 위한 ResultSet 생성
    • 예외 처리
  • 실제 쿼리를 요청하는 부분 외에 구조적인 반복이 심하다는 문제점이 있음
  • JdbcTemplate를 사용할 경우 위 반복을 내부적으로 처리해주고 작업의 목적을 분명하게 만들 수 있음

 

손쉬운 Transaction 처리
  • JDBC API에서 트랜잭션을 사용하기 위해서는 다음 사항들이 추가적으로 요구됨
    • Auto commit 설정 해제
    • Commit을 위한 코드 추가 필요

  • JdbcTemplate를 사용할 경우에는 @Transactional을 이용하여 트랜잭션 처리 가능

 

쉽게 자바 객체로 매핑 가능
  • JDBC API를 사용할 때는 ResultSet에서 컬럼을 꺼내고 직접 매핑하는 작업이 필요

  • JdbcTemplate를 사용하면 맵퍼를 이용해 객체 생성이 가능

 

 

** JdbcTemplate 이용하기!

환경 설정
  • JDBC 환경과 동일하게 진행 가능
  • build.gradle 파일에 JDBC와 DB Driver 관련 라이브러리 추가
    • implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    • runtimeOnly 'mysql:mysql-connector-java'
  • rescources/application.properties 파일에 데이터베이스 접속 정보 추가
    • spring.datasource.url=jdbc:mysql://localhost:3306/board
    • spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    • spring.datasource.username=username
    • spring.datasource.password=password
  • 생성한 Entity도 동일하게 사용 가능

 

Jdbc Template을 사용할 때 JDBC API에서 바뀌는 부분
  • 반복되는 코드를 대부분 제거
  • SQL은 작성

 

JdbcTemplate를 이용하여 게시글 저장
  • JdbcTemplate에서 insert와 update, delete는 update() 메소드를 사용
  • 쿼리 실행으로 인해 변경된 행의 개수를 반환

 

JdbcTemplate를 이용하여 게시글 조회
  • mapper 사용

 

JdbcTemplate CRUD에 사용되는 method 정리
  JdbcTemplate Example
Create update
SimpleJdbcInsert
String query = "insert into post(title, content) values(?,?)";
jdbcTemplate.update(query, "제목", "내용");
Read query : 결과 다수
queryForObject : 결과 0개 또는 1개
String query = "select id, title from post where id = ?";
jdbcTemplate.query(query, 27);
Update update String query = "update post set content = ? where id = ?";
jdbcTemplate.update(query, "변경된 내용", 27);
Delete update String query = "delete from post where id = ?";
jdbcTemplate.update(query, 27);

 

 

 

정리 !

JDBC API보다 JdbcTemplate을 사용하는 것이 더 많은 장점을 가짐
- 반복 문제 해결
- 간결한 코드로 가독성 향상
- 자동화 해주는 부분과 객체 매핑을 간단하게 가능

단점
- SQL을 직접 작성

'spring' 카테고리의 다른 글

JPA / Hibernate / Spring Data JPA  (0) 2024.09.13
ORM  (0) 2024.09.13
JDBC  (0) 2024.09.13
Entity / DTO / DAO / Repository  (0) 2024.09.13
PUT, DELETE API  (0) 2024.09.13