Spring DAO
: Spring에서 제공하는 DAO 모듈, 일반적으로 Data Access Framework라고 부름
: Framework들의 기본 원리는 Templete Method Pattern을 기본으로 구성


- 위와 같은 순서를 갖는 메소드 생성 → Spring DAO
1. Connection 객체 생성 - DBCP 객체
- DBCP(DataBase Connection Pool) 객체 : DataSource 객체
- JdbcTemplate API 사용
< 수업 순서 - 2024.08.28 >
1. DataSourceApp
- pom.xml 파일에 라이브러리 등록
- ojdbc 라이브러리

- spring-jdbc 라이브러리 등록



- 트렌젝션 라이브러리도 자동으로 빌드 처리

- ➡️라이브러리 빌드 처리 완료

- DataSource 객체 : 다수의 Connection 객체를 미리 생성하여 저장하고 있는 객체(DBCP)
→ Spring Bean Configuration File(07_dao.xml)에서 DataSource 인터페이스를 상속받은 자식클래스를 Spring Bean으로 등록해 스프링 컨테이너에 의해 관리되도록 설정

➡️실행 콘솔
2. 07_dao.xml
-
Spring Bean Configuration File(07_dao.xml)에서 DataSource 인터페이스를 상속받은 자식클래스를 Spring Bean으로 등록

-
JdbcTemplate 클래스를 Spring Bean으로 등록
→ JdbcTemplate 클래스의 dataSource 필드에 DataSource 객체가 저장되도록 의존성 주입
→ Setter 메소드나 생성자가 있어야 필드에 객체를 저장할 수 있음.

-
StudentDAO 인터페이스를 상속받은 자식클래스를 Spring Bean으로 등록
→ StudentDAOImpl 클래스의 jdbcTemplate 필드에 JdbcTemplate 객체가 저장되도록 의존성 주입

-
StudentService 인터페이스를 상속받은 자식클래스를 Spring Bean으로 등록
→ StudentServiceImpl 클래스의 studentDAO 필드에 StudentDAO 객체가 저장되도록 의존성 주입
➡️설명 : 클래스가 상속받은 인터페이스를 필드에 저장하기 위해 의존성 주입을 해야함.
3. Student : STUDENT DTO 클래스 - 테이블의 하나의 행을 작성해 표현(@Data, @Builder 어노테이션 사용)
4. StudentDAO 인터페이스 : DAO 클래스가 반드시 상속받아야 되는 인터페이스
5. StudentDAOImpl DAO 클래스(StudentDAO 인터페이스 상속) : Spring DAO 기능을 사용해 DAO 클래스 작성→ Template Method Pattern이 적용된 JdbcTemplate 객체의 메소드를 호출하여 DAO 클래스의 메소드 작성
- Template Method Pattern : 기능 구현을 쉽게 제공하기 위해 메소드에 필요한 명령이 미리 작성된 디자인 패턴
- JdbcTemplate 객체를 저장하기 위한 필드 작성(의존성 주입)

- insert, update, delete, select, selectList 메소드 작성
- JdbcTemplate.update(String sql, Object ... args) : SQL 명령(INSERT, UPDATE, DELETE)을 DBMS 서버에 전달하여 실행하는 메소드, 인파라메타에 저장될 값

- JdbcTemplate.queryForObject(String sql, RowMapper <T> rowMapper, Object ... object) :
SQL 명령(SELECT)을 DBMS 서버에 전달하여 실행하는 메소드
단일행의 검색결과를 DTO 객체로 반환하기 위해 사용하는 메소드
- RowMapper 객체 : 검색행을 Java 객체로 변환하기 위한 객체
- RowMapper 인터페이스의 추상메소드를 오버라이드 선언하여 메소드에 검색행의 컬럼값을 객체 필드에 저장하기 위한 매핑정보를 제공하는 명령 작성, RowMpper 인터페이스로 객체 못만들고 상속받은 자식클래스로 객체를 만들어야함. 익명의 클래스로 객체 생성, 검색행을 Student로 만듦. mapRow라는 메소드가 검색행을 자바객체로 작성하는 동작 실행.
→ RowMapper<T> 인터페이스를 상속받은 StudentRowMapper 클래스를 불러와 작성(익명의 내부 클래스 작성 - 유지보수 효율성 증가)⬇️
- JdbcTemplate.query(sql, new RowMapper<T> rowMapper, Object ... object) :
SQL 명령 SQL 명령(SELECT)을 DBMS 서버에 전달하여 실행하는 메소드
다수행의 검색결과를 List 객체로 반환하기 위해 사용하는 메소드
- selectStudent와 동일하게 StudentRowMapper 클래스 불러와 작성

6. StudentRowMapper : RowMapper<T> 인터페이스를 상속받은 클래스 - 검색행을 자바 객체로 변환하는 메소드 작성

7. StudentService 인터페이스 : 모든 Service 클래스가 상속받아야 되는 인터페이스
8. StudentServiceImpl : 데이터 처리 기능을 제공하기 위한 Service 클래스 - Spring Bean Configuration File에 Spring Bean으로 등록(StudentDAO 의존성 개입)
9. StudentApp : 명령 실행
-
insert 명령

-
update 명령

-
delete 명령

-
selectList 명령
