본문 바로가기
Project/jp

(8)데이터베이스(Oracle) 연결

by 김뚱 2018. 7. 20.

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);
    }

}


728x90
반응형

'Project > jp' 카테고리의 다른 글

(9)HandlerMethodArgumentResolver 적용  (1) 2018.07.21
(7)인터셉터(Interceptor) 설정하기  (0) 2018.07.19
(6)로그(log4j) 설정하기  (0) 2018.07.19
(5)web.xml 설정하기  (0) 2018.07.19
(4)pom.xml 설정하기  (0) 2018.07.14

댓글