본문 바로가기
Spring

[스프링] jdbc 추가

by chu_dw 2023. 4. 10.

● DAO 패턴

어이없게 저번 jdbc정리에서 젤 중요한 dao부분이 빠져 추가한다.

데이터계층 전체적인 흐름도 자시 정라하겠다.

 

DAO패턴이란 data access object로 데이터의 취득과 변경등의 데이터 접근을 DAO라는 오븝젝트로 분리하는 패턴이다.

DAO클래스는 데이터베이스의 테이블 별로 별도로 만들어진다.

DAO의 기본 구조(기본 메서드)는 담당하는 데이블에 대한 CRUD (create, read, update, delete)의 형태이다.

전 글에서 설명했던 데이터 액세스 기술인 mybatis, jpa 등이 dao구현을 위한 데이터 액세스 기술이다.

 

 

● SELECT

jdbc 템플릿에서 제공하는 메서드에 대해 추가적으로 자세하게 설명하겠다.

도메인으로 변환하지 않는 select문의 형태는 아래와 같다, 도메인으로 변환하지 않는다는 것은 레코드의 수를 구하거나, 특정 칼럼만 취득하는 것을 말한다.

첫번째 인수는 sql문으로 ? 를 지정할 수 있다.  두번째 인수는 반환형을 지정해준다. 세번째 인수는 sql문의 파라미터 값을 지정해 준다.

 

 

도메인으로 변환하는 select문이 저번에 정리한 코드들이다.

한 레코드의 도메인을 가져올 때 queryForObject, 여러 레코드의 도메인을 가져올 때 query 메서드를 사용한다.

 

먼저 queryForObject의 코드이다.

첫 번째 인수는 SELECT문이고, 3번째 인수는 SELECT문에게 전달 해줄 파라미터값이 들어간다(위 코드엔 없다.)

두 번째 인수에는 도메인으로 변환 처리하는 클래스의 오브젝트를 넣어준다.

RowMapper는  스프링이 제공하는 인터페이스로 mapRow라는 추상 메서드를 정의하고있다. mapRow는 1건의 레코드를 도메인으로 변환해서 반환값으로 돌려준다.

위 코드에선 익명클래스를 이용해 도메인으로 변환 처리하는 클래스의 오브젝트를 넣어줬다.

익명 클래스를 사용하지 않고 RowMapper를 상속하는 클래스를 만들어 두번째 인수에 넣어줘도 된다.

 

다음은 여러 레코드의 도메인을 가져오는 query 메서드이다.

동작 방식은 query와 같으며 반한값이 list로 들어간다.

 

query 메서드와 queryForObjecy 메서드에서 도메인 변환을 자동으로 해줄 수있다. 이전에 간단하게 정리했던 BeanProPertyRowMapper를 사용하면 된다.

그럼 아래와 같이 코드를 줄일 수 있다.

 

● INSSERT, DELETE, UPDATE

SELECT문 외에 INSSERT, DELETE, UPDATE문을 사용할때 DAO는 아래와 같다.

 

'Spring' 카테고리의 다른 글

[스프링] REST 아키텍처  (0) 2023.08.01
[스프링] mvc 패턴  (0) 2023.07.04
[스프링] jdbc  (0) 2023.04.03
[스프링] di  (0) 2023.03.27
[스프링] gradle  (0) 2023.03.21