[스프링] jdbc
스프링 Jdbc는 데이터 액세스 기술로 앞에서 설명했던 데이터 액세스 층에 대해 조금 더 자세하게 정리하겠다.
● 데이터 액세스 층과 스프링
데이터 액세스 층의 역할은 앞에서 정리 했듯이 데이터 액세스 처리를 비지니스 로직 층에서 분리하는 것이다.
이때 dao를 이용하여 데이터 액세스 부분과 비지니스 로직을 분리 해준다.
비지니스 로직의 코드에서 dao 클래스의 메서드를 호출하여 사용하는 것이다.
● 자바의 데이터 액세스 기술과 스프링 기능
자바에는 jdbc, 하이버네이트, jpa, mybatis 등 다양한 데이터 엑세스 처리 기술이 있다.
그럼 dao 구현에서 스프링이 어떤 역할을 하는지 정리하겠다.
스프링은 새로운 데이터 액세스 처리 기술을 제공하는 것이 아니라 연계 기능을 제공한다.
즉 spring jdbc안에 jdbc가 들어있고 spring jpa 안에 jpa가 있는 느낌이다.
● 데이터 소스
데이터 액세스 기술의 종류와 상관없이 데이터베이스 접속은 필요하다.
이 떄 데이터 소스는 데이터베이스와 접속을 관리해주는 인터페이스 이다.
커낵션 풀에 의해 커넥션 오브젝트를 재사용된다.
*커넥션 풀이란(dbcp)? : 웹컨테이너 was가 실행되면서 DB와 미리 연결해놓은 객체들을 pool에 저장 해놓고 클라이언트 요청이 오면 connection을 빌려 디비와 연결하는 것
커넥션풀을 쓰지 않을 경우 매번 db에 데이터를 요청할 때 마다 드라이버를 요청하고 커넥션 객체를 만들어야하는 번거러움이 있다.
(pom.xml에는 무조건 의존 라이브러리 있어야함 아래처럼 추가)

● 일반 jdbc

jdbc연결 함수인 connect()를 통해서 conn을 사용? (대충 넘)
● 스프링 jdbc
jdbc를 래핑한 api를 제공해 소스코드로 단순화한 것으로
커넥션 연결 종료, sql 실행문, 예외처리, sql실행 결과 행에 대한 반복 처리 등을 생략한다.
스프링 jdbc를 사용하기 위해서는 applicationcontext.xml 파일에 bean으로 의존 설정을 해준다.

jdbc 템플릿에서 제공하는 메서드는 아래와 같다.

그럼 이것들을 활용하여 만든 dao 구현체를 정리하겠다.

먼저 @component은 MemberDAOImpl을 service에 주입해주기 위한 것으로 jdbc와는 상관없는 앞에서 정리한 component-scan 으로 의존성을 주입해준 것이다. applicaitoncontext 아래쪽을보면 설정을 볼 수 있다.
jdbc의 경우 bean으로 applicationcontext에서 등록을 해줬기 때문에 annotation-config방식으로 @autowired만 사용하여 바로 주입해주면 된다.
그 코드가 JdbcTemplate jdbcTemplate; 이다. bean 등록시 입력해준 Id값으로 Jdbctemplate에 의존 관계를 주입해 줬다.
그러면 jdbctemplate 객체는 위에서 정리한 jdbc taplete의 메서드들을 사용할 수 있게 된다.
read() 함수의 경우 리턴타입이 StudentVo이고 함수안에서 StudentVo 객체 vo를 만들어 vo안에 queryforobject를 통해 레코드 정보를 객체에 맵핑 해준다. 이때 studentVo는 맨처음 설정해준 domain이다.
BenaPropertyRowMapper 는 도메인 자동변환을 위한 스프링 제공 클래스로 StudentVO에 있는 프로퍼티 명과 데이터베이스 컬럼명을 자동으로 연결시켜 값을 매핑해준다.
결론적으로 매개변수로 받은 id 값의 domain 데이터를 queryforobject로 받아와 리턴해준다.
만약 서로 이름이 다를 경우 아래 readlist() 함수처럼 RowMapper 인터페이스를 구현해서 하나씩 매핑 해줘야한다.