반응형
Spring JDBC
▶ JdbcTemplate 클래스
- JDBC의 반복적인 코드를 제거하기 위해 제공하는 클래스
- DAO 클래스에서 JdbcTemplate 클래스가 제공하는 템플릿 메소드를 호출하여 DB연동 처리
- JdbcTemplate 클래스는 내부적으로 JDBC API를 이용하여 실제 DB연동 작업 처리
BoardDAO, UserDAO → Spring DAO(JdbcTemplate) → JDBC API (java.sql) → Oracle / MySQL
<!-- JdbcTemplate 클래스 등록 -->
<bean class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
▶ DataSource 설정
JdbcTemplate 클래스가 JDBC API를 이용하여 DB연동 처리를 하려면 데이터베이스로부터 커넥션을 얻어야한다. 따라서 JdbcTemplate 객체가 사용할 DataSource를 <bean> 등록하여 스프링 컨테이너가 생성하도록 한다.
<!-- DataSource 클래스 등록 (외부 property 를 사용)-->
<context:property-placeholder location="classpath:datasource.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<datasource.properites>
# DataSource Setting
jdbc.driverClassName=org.h2.Driver
jdbc.url=jdbc:h2:tcp://localhost/~/test
jdbc.username=sa
jdbc.password=
▶ Transaction 관리
- xml 기반의 AOP설정만 사용 가능, 어노테이션 사용 불가
- 애스팩트 설정에서도 <aop:aspect> 엘리먼트 대신 <aop:advisor> 엘리먼트를 사용
: 트랜잭션 관리 어드바이스는 우리가 직접 클래스를 구현하지 않고, 스프링 컨테이너가 자동으로 생성하므로 어드바이스 메소드 이름을 알 수 없다.
<!-- Transaction 설정 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="txPointcut" expression="execution(* com.multicampus.biz..*Impl.*(..))"/>
<aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice"/>
</aop:config>
반응형
'IT > Spring' 카테고리의 다른 글
ViewResolver 적용하기 (0) | 2022.05.30 |
---|---|
포워드(Forward)와 리다이렉트(Redirect) 차이 (0) | 2022.05.26 |
Java Framework - Spring(4) : MVC 모델 (0) | 2022.05.19 |
Java Framework - Spring (2) : DI / AOP (0) | 2022.05.18 |
Java Framework - Spring (1) : 컨테이너 / IoC (0) | 2022.05.16 |
댓글