1. DAO 의 개념
: DBMS를 통해 데이터를 저장 및 검색하는 기능을 전담하는 객체
- business layer와 독립적인 persistence layer 구현 및 변경 가능
- dao mock object를 이용한 테스트 용이
2. Data Access Template
: 각 영속성 기술을 위한 template class 제공한다.
: DAO 에서 반복적으로 실행되는 작업들을 자동으로 수행한다.
3. Spring 에서 예외처리 지원
: DB 오류에 관한 다양한 Exception class 제공한다.
: Spring 이 지원하는 Exception은 모두 "unchecked" exception 이다. 즉 try-catch로 잡아서 처리할 필요가 없다.
4. Data Source 설정
: 데이터베이스에 대한 connection을 제공하는 factory 객체
- Connection pool 사용
- JNDI에 등록된 Data Source
- JDBC driver 직접 이용
1) connection pool
: 데이터베이스 커넥션을 미리 생성시키고 pool로 관리함으로써 데이터베이스 접근 성능을 향상시키기 위한 방법
- BasicDataSource 타입의 객체를 spring bean으로 생성
2) JNDI에 등록된 data source 설정
: Java EE application server에서 data source를 생성하고 JNDI service에 등록 및 사용
5. JDBC API
: java application에서 데이터베이스를 접근하는 가장 기본적인 방법
- 장점
1) 표준 SQL 언어를 사용
2) 특정 DBMS에서 제공하는 고유 기능 사용 가능
- 단점
1) 데이터 질의, 갱신 등 핵심적인 코드 외에 connection, statement 등의 자원 할당 및 반납, 예외 처리 등과 관련된 코드 필요
2) 위와 같은 코드가 각 데이터 접근 메소드마다 중복됨
- JDBC API 사용 예
6. Spring JDBC Template Classes
: JDBC 기반 프로그램에서 반복적으로 작성되는 코드를 구현하여 숨김
1) JdbcTemplate
2) NamedParameterJdbcTemplate
7. JdbcTemplate
- bean 설정 (spring boot는 필요x)
* 참조 관계 주목 !
- Query method 1 : query()
: rowMapper - ResultSet 에 포함된 각 행을 추출해서 T type의 domain객체를 생성하는 RowMapper 객체
- RowMapper interface
: mapRow() => ResultSet의 특정 행에 대해 T type의 객체 생성 및 반환
- 구현 예 1 : RowMapper class를 별도로 정의
- 구현 예 2: RowMapper를 익명 클래스로 구현
- 구현 예 3 : Java 8의 Lambda expression 활용
- query method 2 : queryForList()
: 질의가 하나의 column만을 조회하는 경우 RowMapper 대신 그 column type에 해당하는 Java type 이름을 제공
- query method 3 : queryForObject()
: 질의 결과로 List 대신 하나의 T type 객체를 반환
: 질의 결과로 검색되는 row 가 하나인 경우 사용
- Insert/Update/Delete method
- 가변 길이 인자 지원
예 1)
예 2)
8. NamedParameterJdbcTemplate
: 질의에 포함된 parameter에 이름을 사용
=> Object 대신에 Map이나 paramSource 를 인자로 받음
예시 )
- SqlParameterSource를 사용한 parameter값 설정
- BeanPropertySqlParameterSource 이용
9. SimpleJdbcInsert
예 1)
예 2)
10. DaoSupport
- bean 설정
'Programming > Spring' 카테고리의 다른 글
11. Transaction Management (0) | 2021.06.08 |
---|---|
10. Spring 기반 RESTful service (0) | 2021.06.07 |
08. MyBatis (0) | 2021.06.01 |
07. Thymeleaf (0) | 2021.05.31 |
06. Spring Boot (0) | 2021.05.27 |