스프링에서는 JDBC 기반의 DB 연동 프로그램을 쉽게 개발 가능하도록
JdbcTemplate 클래스를 지원한다.
JdbcTemplate
JdbcTemplate 은 GoF 디자인 패턴 중, 템플릿 메소드 패턴이 적용된 클래스이다.
템플릿 메소드 패턴
: 복잡하고 반복되는 알고리즘을 캡슐화해서 재사용하는 패턴을 뜻함
템플릿 메소드 패턴을 이용하면 반복사용되는 알고리즘을 템플릿 메소드로 캡슐화할 수 있어서
JDBC 처럼 코딩 순서가 정형화 되어있는 기술에서 유용하게 쓰일 수 있다.
즉, 반복되는 DB 연동 로직의 경우
JdbcTemplate 클래스의 템플릿 메소드가 제공하고,
개발자는 달라지는 SQL문과 설정값만 신경쓰면 된다 !
또한 DAO 클래스에서는 JdbcTemplate 클래스가 제공하는 템플릿 메소드를 호출해서
DB 연동을 간단하게 처리 가능하다.
스프링 JDBC 설정
( pom.xml )
pom.xml 파일에 DBCP 관련 <dependency> 설정을 추가해야 한다.
<!-- Connection Pool -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
추가한 뒤 저장하면
이렇게 라이브러리가 추가된다.
DataSource 설정
1. <bean> 태그로 직접 설정하기
JdbcTemplate 클래스가 내부적으로 JDBC API 를 이용해서 DB 연동을 처리하려면
꼭 DB로부터 커넥션을 얻어야 한다.
따라서 JdbcTemplate 객체가 사용할 DataSource 를 <bean> 태그로 등록해서 스프링 컨테이너가 생성하게 해주자.
( applicationContext.xml )
<!-- DataSource Configuration -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE"></property>
<property name="username" value="heidi"></property>
<property name="password" value="1234"></property>
</bean>
아파치의 BasicDataSource 는 DataSource 인터페이스를 구현한 클래스이다.
또한 BasicDataSource 객체는 DB 연결에 필요한 property 들을 Setter 인젝션으로 설정해줬다.
그리고 BasicDataSource객체가 삭제되기 전에 연결을 해제하기 위해서 destroy-method 속성에 close 메소드를 넣었다.
2. 프로퍼티 파일을 활용한 DataSource 설정
PropertyPlaceholderConfigurer 를 이용하면 외부의 프로퍼티 파일을 참조해서 DataSource 를 설정해줄 수 있다.
src/main/resources 소스 폴더 내부에 config 폴더를 생성하고,
config 폴더에 database.properties 파일을 작성해보자.
config 파일을 먼저 생성하고,
파일에서 마우스 오른쪽 클릭 > New > File 선택하기
( Untitled Text File 로 만들어도 상관없음! )
위와 같이 확장자까지 입력해주고 Finish
( 난 이미 만들어놔서 Finish 버튼도 활성화 되어있지 않고, 창 상단에 이미 존재한다고 떠있음 )
이제 database.properties 파일 내에 아래처럼 써주자
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:XE
jdbc.username=heidi
jdbc.password=1234
( applicationContext.xml )
<!-- DataSource Configuration -->
<context:property-placeholder location="classpath:config/database.properties" />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password"></property>
</bean>
( p.216-219, BoardWeb_DI_AOP_anno 프로젝트 참고)
JdbcTemplate 메소드
update()
- insert, update, delete 구문을 처리할 때 사용
- 두 가지 방법이 존재
- 1) ? 갯수만큼의 값들을 차례로 나열하는 방법
2) Object 배열 객체에 ? 갯수만큼의 값들을 세팅해서, 배열 객체를 전달하는 방법
queryForInt()
- select 구문으로 검색된 갯수를 정수 값으로 리턴받을 때 사용
queryForObject()
- select 구문의 실행 결과를 특정 자바객체(VO: Value Object)로 매핑해서 리턴받을때 사용
- 즉, select문으로 객체 하나를 검색할 때 사용
- 검색결과가 없거나, 두개 이상일때 예외 발생!
query()
- select문의 실행 결과로 목록을 받을 때 사용
- RowMapper 객체의 mapRow() 메소드에 의해 ROW 정보가 매핑된 VO 객체 여러개가 List 컬렉션에 저장되어 리턴됨
'Java . Spring . Web . SQL' 카테고리의 다른 글
[Model 2] Model 2 아키텍처로 게시판 개발 (0) | 2020.10.21 |
---|---|
[Model 1] Model 1 아키텍처로 게시판 개발 (0) | 2020.10.21 |
어노테이션 기반 MVC 개발 (0) | 2020.10.20 |
[AOP] 어노테이션 기반 AOP (0) | 2020.10.19 |
[AOP] JoinPoint 와 바인드 변수 (0) | 2020.10.18 |
댓글