본문 바로가기
프로그래밍/스프링 & 스프링 부트

스프링 MyBatis Oracle DB 연동

by 밍구몬 2019. 5. 10.

1. pom.xml 수정

 

mybatis와 oracle database를 사용하기 위하여 pom.xml에 다음의 내용을 추가해 준다.

 

		<!-- mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.6</version>
		</dependency>
	
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.2</version>
		</dependency>
	
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
	
		<dependency>
		    <groupId>org.apache.commons</groupId>
		    <artifactId>commons-dbcp2</artifactId>
		    <version>2.6.0</version>
		</dependency>
		
		<!-- 오라클 JDBC 드라이버 -->
		<dependency>
			<groupId>com.oracle</groupId>
			<artifactId>ojdbc6</artifactId>
			<version>12.1.0.2</version>
		</dependency>

		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
	

2. root-context.xml

 

프로젝트 구조를 변경하지 않았다면 src -> main -> wabapp -> WEB-INF -> spring 아래에 root-context.xml 파일이 있다.

root-context.xml파일을 열어 Namespace를 누르면 다음과 같은 화면이 나온다. 아래와 같이 체크를 해주면 된다.

 

그다음 다시 Source로 돌아가 root-context.xml에 다음의 내용을 추가하여 oracle DB와 mybatis 연결을 설정한다.

	<!-- Oracle JDBC DataSource -->
	<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
		<property name="username" value="test"/>
		<property name="password" value="qwe123"/>
	</bean>

    
	<!-- mybatis SqlSessionFactoryBean -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:/mybatis-config.xml" />
        <property name="mapperLocations" value="classpath:/mappers/**/*Mapper.xml" />
	</bean>
	
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory" />
	</bean>

여기서 JDBC DataSource에 url설정을 보면 포트는 1521이고 뒤에 XE라고 적었는데 포트는 오라클의 기본 포트인 8080이 아닌 리스닝 포트를 적어주는 것이다. 나는 처음 기본 포트를 적어서 오류가 났었다 ...

리스닝 포트 확인 방법은 아래의 경로인데 설치된 경로가 다르다면 저런 식으로 찾아가면 된다.

C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN 의 listener.ora 를 메모장이나 텍스트 편집기로 열어주면 확인할 수 있다. 

혹시라도 리스닝 포트를 변경하고 싶다면 1521이라고 적힌 부분을 변경한 뒤 cmd를 관리자 권한으로 실행시켜 lsnrctl stop 리스너를 중지시킨 다음 lsnrctl start 로 다시 시작하면 된다.

 

그다음 XE라고 적은 부분은 SID를 적는 부분이다. MariaDB와 헷갈려 DB명을 적어 에러가 났었다 ....

SID 확인 방법은 오라클 디비에 접속하여 다음의 명령어를 입력하면 볼 수 있다.

select instance from v$thread;


여기까지 하면 설정은 완료된 것이다.

 

JUnit으로 연동 테스트를 해볼수도 있지만 직접 만들어서 테스트해보는게 가장 좋은 것 같다.

처음 세팅을 하고 잘못 설정을 했음에도 불구하고, JUnit테스트를 했을 때는 성공적으로 됐었기에 실제 디비랑 연결하여 사용해 보는 것이 좋다고 생각한다.

JUnit test

해당 프로젝트 우클릭 -> Java Build Path -> Add Library

JUnit -> Next

 

JUnit4 선택후 Finish

testMapper 추가

src/test/java에 다음의 파일을 만들어준다음 아래의 내용을 넣어주면 된다.

 

DBconnectionTest.java

package com.spring.test;

import java.sql.Connection;

import javax.inject.Inject;
import javax.sql.DataSource;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/**/root-context.xml" })
public class DBConnectionTest {
    
    @Inject
    private DataSource ds;
 
    @Test
    public void testConnection(){
    	
        try (Connection con = ds.getConnection()) {
 
            System.out.println("\nDB연결 성공 !!\n");
 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

MyBatisTest.java

package com.spring.test;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})
public class MyBatisTest 
{
    @Inject
    private SqlSessionFactory sqlFactory;
    
    @Test
    public void testFactory(){
        System.out.println("sqlFactory : "+sqlFactory);
    }
    
    @Test
    public void testSession() throws Exception{
        
        try(SqlSession session = sqlFactory.openSession()){
            
            System.out.println("session  : "+session);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

테스트

 

하나씩 우클릭 하여 -> Run As -> JUnit Test를 해주면 된다.

성공하면 다음과 같이 초록불이 뜨고, 실패하면 빨간불이 뜬다.