도당탕탕
JDBC Template에 대해서 본문
INTRO
- Template 패턴에 대해 알기
- JDBC Template에 대해서 알기
- Spring Jdbc에 대해 알기
Template 패턴 이란?
- 어떤 소스 코드상의 알고리즘에서 특정 환경 또는 상황에 맞게 확장 또는 변경을 해야 할 경우 매우 유용하게 사용하는 패턴
- Template 패턴의 장점
- 코드 중복 감소
- 자식 클래스의 역할을 감소시키면서 핵심로직 관리 용이
- 객체 추가 및 확장을 쉽게 가능
- 재사용성 증가
- Template 패턴의 단점
- 추상 메소드가 너무 많으면 복잡성 증가
- 추상 클래스와 구현 클래스간의 관계 복잡도가 증가
JDBC Template?
- 스프링의 가장 기본적인 Data Access 템플릿으로 쿼리 기반으로 데이터 베이스의 접근 가능
- 모든 영속성 프래임워크는 내부적으로 JDBC API를 이용
- DAO 계층에서 Jdbc Template API를 사용
- Data Source
- DB Server와 연결 시키는 연결 팩토리
- JDBC의 일부분
- Connection 의 정보를 가지고 있고 Bean 으로 등록하여 인자를 넘겨준다.
- DB Connection Pooling 기능을 가지고 있음
- 기본적으로 BasicDataSource를 사용
- JDBC Template 같은경우 제네릭을 사용해 어떠한 값이 오든 그대로 반환
- 번외 (영속성 프레임워크 종류)
- SQL Mapper : Mybatis, Ibatis, JDBC Template
- ORM : JPA, Hibernate
Spring JDBC
- Spring JDBC가 하는 일
- Connection 및 Statement 열기와 닫기 기능 실행
- Statement 실행
- ResultSet 처리
- Exception 처리
- Transaction 처
- 개발자가 Spring JDBC에서 하는일
- DataSource를 설정
- JDBCTemplate에서 dataSource를 주입
- 메소드에 SQL 문 작성
- JDBC Template 메소드를 활용해 쿼리문 처리
- JDBC Driver : DBMS가 이해할 수 있는 프로토콜로 변환해주는 어댑터
- DBCP(DB Connection Pool) : DB와 커넥션을 맺고 있는 객체를 관리하는 역할
- 하는 이유 : DB 연결시 마다 Driver를 로드하고 커넥션 객체를 반복적으로 작업하는 것을 Connection Pool을 만들어 반복하지 않게 만듬
- WAS를 실행 시키면 미리서 DB Connection 객체를 생성하고 Pool이라는 공간에 저장했다가 요청이 오면 저장소에서 가져다 쓰고 반환 시킴
- 이로 인해 시간및 자원 절약
- Spring에서 필요한 라이브러리
- jdbc class: Spring-jdbc
- data source: commons-dbcp
- jdbc driver: mysql-connector-java (h2 connector 사용가능 즉 맞는 db driver 사용)
JDBC Template 만들어 보기
- Gradle
- apach-commons-dbcp를 Gradle에 추가
- ConnectionManager
- DB_DRIVER, DB_URL, DB_USERNAME, DB_PASSWORD 설정한다. (h2 내부 driver 사용)
- BasicDataSource에 정보들 Set 한다.
- JdbcTemplate에 의존성 주입하고 connection 할 getConnection 메소드 구현한다.
- JDBCTemplate
- Parameter에 쿼리문이랑 statement에 set해줄 데이터를 넣는 update 메소드를 만든다.
- 가변인자로 받아온 value값들을 넣어줄 createPreparedStatementSetter 메소드를 만들어 statement를 set해준다. 이때 실질 적으로 set을 한게 아니라 추상화를 통해 만들어 놓고 밑에서 실질적으로 set하겠금 해준다.
- PreparedStatementSetter
- 실제로 statement를 업데이트 하는 update 메소드를 만든다.
- 이때 인자는 쿼리문과 statement를 추상화 시킨 PreparedStatementSetter를 받아온다.
- try-with-resources(괄호 안에 있는 요소들이 try 구문이 끝나면 닫아주는 기능) 로 Connection, Statement 연결한다.
- 위에 썼던 setPreparedStatement로 statmenet에 쿼리문에 있는 물음표 순서대로 setObject 해준다.
- 마지막으로 statement를 실행 시켜준다.
- DAO
- JDBCTemplate를 만들었으니 쿼리문을 만든다.
- 내가 만든 템플릿 안에 있는 update메소드를 활용해 쿼리문과 setObject 해줄 데이터들을 넣어준다.
- 실제 코드 : JdbcTemplate Mission
'Spring' 카테고리의 다른 글
MVC와 MVC FrameWork (0) | 2020.01.16 |
---|
Comments