스프링 프레임워크(28) Spring JDBC

넙데데맨·2022년 6월 21일
0

데이터 액세스 공통개념

DAO(Data Access Object) 패턴

데이터 액세스 계층을 비즈니스 로직, 데이터 액세스 로직 분리하는 패턴

  • 서비스 계층에 영향을 주지 않고 데이터 액세스 기술을 변경할 수 있는 장점

커넥션 풀

미리 정해진 개수의 DB Connection을 Pool에 넣어 준비 후 요청할 때마다 Pool에서 꺼내 하나씩 할당해주고 돌려받아 Pool에 넣는 기법

DataSource

커넥션 풀 기능을 지원하는 객체
Spring에서는 Spring Bean으로 등록해 사용

SimpleDriverDataSource

Spring 제공 가장 단순한 DataSource 구현 클래스
getConnection() 호출 시 매번 DB 커넥션 만들고 Pool 관리 안함

SingleConnectionDriverDataSource

매번 DB 커넥션 만들지 않음
순차적 진행 통합 테스트에서 사용

Apache Commons DBCP

오픈 소스 DB 커넥션 풀

c3p0 JDBC/DataSource Resource Pool

JDBC 3.0 스펙 준수하는 Connection, Statement Pool 제공
두 가지 모두 setter 메소드를 제공해 Spring Bean 등록해 사용하기 편함

JDBC

모든 자바 데이터 액세스 기술의 근간
ORM 기술도 내부적으로는 JDBC를 이용한다.

Spring JDBC

실행할 SQL과 바인딩할 파라미터를 넘겨주거나, 쿼리 실행 결과를 넘겨받을 객체를 지정해주기만 하면된다.
사용 전 DataSource를 Bean으로 등록해야 함

Spring JDBC가 해주는 작업

Connection 열기 닫기

  • Connection과 관련된 모든 작업 Spring JDBC가 필요한 시점에서 알아서 진행
  • 예외 발생시에도 열린 Connection 객체를 닫아준다.

Statement 준비, 닫기

  • Statement, PreparedStatement 생성, 준비 작업
  • 마찬가지로 알아서 객체를 닫아준다.

Statement 실행

ResultSet Loop 처리

Exception 처리, 반환

  • 체크 예외인 SQLException을 런타임 예외인 DataAccessException 타입으로 변환
  • 체크 예외는 예외를 처리하지 않으면 컴파일 에러 발생
  • 런타임 예외는 예외 처리를 강제하지 않는다.

Transaction 처리

JdbcTemplate 클래스

JDBC의 기능을 활용하기 쉽게 유연성 제공 클래스

제공 기능

실행 Insert Update Delete 등 데이터 변경 쿼리 수행
조회 Select
배치 여러 쿼리 한 번에 수행

클래스 생성

  • DataSource를 Bean으로 동록한 뒤 JdbcTemplate이 필요한 클래스에서 DI 받는다

메소드

update()

insert,delete,update문 실행 시 사용

queryForObject()

select문 사용 시 하나의 Row를 가져올 때 사용
여러개의 칼럼 한 개의 ROW 반환
RowMapper 여러 개의 칼럼을 가진 한 개의 Row를 mapRow메소드를 통해 객체로 매핑 가능
객체 형태로 반환 받음

query()

여러개의 칼럼 여러 개의 ROW 반환
RowMapper 여러 개의 칼럼을 가진 여러 개의 Row를 mapRow메소드를 통해 객체로 매핑 가능
List 형태로 반환 받음

profile
차근차근

0개의 댓글