1. pom.xml 설정
이전글을 참고하자.
2. Oracle과 DB(data base) 연결 설정
2-1) src/java/resoucrces/spring > context-datasource.xml 파일 생성
2-2) oracle과 spring의 연결
>>>JP 프로젝트 context-datasource.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!-- 오라클 설정 -->
<bean id="dataSourceSpied" class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="DBTEST" />
<property name="password" value="dbtest" />
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<aop:config proxy-target-class="true">
<aop:pointcut
expression="execution(* jp..controller.*Controller.*(..)) or execution(* jp..service.*Impl.*(..)) or execution(* jp..dao.*DAO.*(..))"
id="serviceOperation" />
<aop:advisor id="transactionAdvisor" advice-ref="txAdvisor"
pointcut-ref="serviceOperation" />
</aop:config>
<tx:advice id="txAdvisor" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="update*" rollback-for="Exeption" />
<tx:method name="delete*" rollback-for="Exeption" />
<tx:method name="insert*" rollback-for="Exeption" />
</tx:attributes>
</tx:advice>
<bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSourceSpied" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="SQL : " />
</bean>
</property>
</bean>
</beans>
2-3) src/java/resoucrces/mapper 폴더 생성
2-4) src/java/resoucrces/spring > cotext-mapper.xml 파일 생성
>>>JP 프로젝트 cotext-mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:mapper/**/*_Sql.xml" />
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSession"/>
</bean>
</beans>
<property>에서 name="dataSource" 와 ref="dataSource"는 같지 않다.
- name : 위에서 등록한 sqlSession 빈(bean)에서 사용할 이름이 dataSource임을 의미한다.
- ref : context-datasource.xml에서 정의한 빈(bean)을 참조하는 것을 의미한다.
- mapperLocations : 앞으로 작성할 SQL문이 위치할 장소를 의미한다.
- value : 앞으로 다양한 SQL문을 만들것인데, 일일이 등록해서 사용하지 않고 서버가 시작될 때 자동으로 SQL이 정의되어 있는 xml 파일을 읽어오도록 하는 것이다. 따라서 SQL이 위치할 mapper 폴더를 잡아주고, 그 안에 모든 폴더를 의미하는 **를 붙여준 후, 마지막으로 "_SQL"로 끝나는 모든 xml 파일을 읽어주도록 한다.
sqlSessionTemplate는 SqlSession을 구현하고, 코드에서 SqlSession을 대체하는 역할을 한다.
3. AbstractDAO 작성
3-1) src/main/java > jp > common > dao 패키지 생성
3-2) dao 패키지 안에 AbstractDAO.java 생성
앞에서 설정한 SqlSessionTemplate을 선언하고 여기에 Autowired 어노테이션(Annotation)을 통해서 의존관계를 자동으로 주입하도록 하였다.
앞으로 개발할 때, 좀 더 편하게 보기 위하여 로그를 남기기 위해 AbstractDAO를 만들어서 insert, delete, update, select 메서드를 재정의 하였다.
>>>JP 프로젝트 AbstractDAO.java
package jp.com.dao;
import java.util.List;
import org.apache.log4j.Logger;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
public class AbstractDAO {
protected Logger log = Logger.getLogger(this.getClass());
@Autowired
private SqlSessionTemplate sqlSession;
protected void printQueryId(String queryId) {
if(log.isDebugEnabled()){
log.debug("\t QueryId \t: " + queryId);
}
}
public Object insert(String queryId, Object params){
printQueryId(queryId);
return sqlSession.insert(queryId, params);
}
public Object update(String queryId, Object params){
printQueryId(queryId);
return sqlSession.update(queryId, params);
}
public Object delete(String queryId, Object params){
printQueryId(queryId);
return sqlSession.delete(queryId, params);
}
public Object selectOne(String queryId){
printQueryId(queryId);
return sqlSession.selectOne(queryId);
}
public Object selectOne(String queryId, Object params){
printQueryId(queryId);
return sqlSession.selectOne(queryId, params);
}
@SuppressWarnings("rawtypes")
public List selectList(String queryId){
printQueryId(queryId);
return sqlSession.selectList(queryId);
}
@SuppressWarnings("rawtypes")
public List selectList(String queryId, Object params){
printQueryId(queryId);
return sqlSession.selectList(queryId,params);
}
}
댓글