[Spring] 스프링으로 DB 엑세스하기
스프링 프레임워크의 데이터베이스 엑세스 작업의 주요 특징
- javax.sql.DataSource 인터페이스를 구현한 Connection Pool 구현 객체가 반드시 필요하다.
(BasicDataSource)
- commons-dbcp 라이브러리가 필요하다.
- 데이터베이스 엑세스 작업 중 오류가 발생하면 DataAccessException이 발생한다.
- DataAccessException은
RuntimeException
의 하위 클래스다. - Unchecked 예외다. (예외처리를 생략해도 된다)
- DataAccessException을 상속받는 다양한 하위 클래스가 존재한다.
- DataAccessException은
- DB 엑세스 기술별로 다양한 xxxTemplate, xxxDaoSupport 클래스를 제공한다.
- 예시
- jdbc : JdbcTemplate, JdbcDaoSupport
- ibatis : SqlMapClientTemplate, SqlMapClientDaoSupport
- hibernate : HibernateTemplate, HibernateDaoSupport
- 예시
- 다양한 DB 엑세스 프레임워크와 연동을 지원한다.
- ibatis(spring 4버전부터 제외), mybatis, hibernate, JPA 등등
- 선언적 트랜잭션 처리를 지원한다.
- 트랜잭션 처리와 관련된 코드를 직접 작성하는 것이 아니라, 트랜잭션 처리가 필요한 클래스나 메소드에 어노테이션을 붙이거나, 클래스들이 위치한 패키지를 지정하기만 하면 트랜잭션 처리가 자동으로 지원된다.
빈 설정 파일
<!-- Connection을 제공하는 객체
jdbc 드라이버 클래스명, 데이터베이스 접속 URL, 사용자명, 비밀번호를 제공해야 한다.
-->
<bean id="basicDataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"></property>
<property name="username" value=""></property>
<property name="password" value=""></property>
</bean>
<!--
JdbcTemplate 클래스는 INSERT, UPDATE, DELETE, SELECT 쿼리문을 간단하게 실행할 수 있는 메소드를 제공한다.
* 커넥션을 제공하는 ConnectionPool객체, BasicDataSource를 제공받아야 한다.
-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="basicDataSource"></property>
</bean>
<!--
업무로직 구현에 필요한 데이터베이스 작업이 구현된 EmployeeDaoImpl를 스프링의 빈으로 등록시킨다.
* SQL 실행작업을 지원하는 JdbcTemplate 객체를 제공받아야 한다.
-->
<bean id="employeeDaoImpl" class="com.sample.dao.EmployeeDaoImpl">
<property name="template" ref="jdbcTemplate"></property>
</bean>
<!--
업무로직이 구현된 EmployeeServiceImpl를 스프링의 빈으로 등록시킨다.
-->
<bean id="employeeServiceImpl" class="com.sample.service.EmployeeServiceImpl">
<property name="employeeDao" ref="employeeDaoImpl"></property>
</bean>