본문 바로가기
코딩/Spring

[Spring] MyBatis & MariaDB 연동하기

by 인생최적화 2020. 6. 29.
반응형

 

스프링 MyBatis & MariaDB 연동하기

 


 

원래 스프링 공부를 어느 정도 하고 단계적으로 포스팅을 하려고 했건만, 제가 많이 부족해서 MyBatis 연동하는 과정에서 매우 애를 먹었습니다. 그래서 연동하는 것만 미리 포스팅 하려고 합니다. MyBatis와 MariaDB를 연동하시는 분들께서 이 글을 보고 부디 해결하셨으면 합니다

 


 

MyBatis

자바 오브젝트와 SQL문 사이의 자동 Mapping기능을 지원하는 ORM입니다. 다시 말해 객체 지향 언어인 자바의 관계형 데이터 베이스 프로그래밍을 보다 쉽세 사용할 수 있도록 도와주는 프레임워크입니다. MyBatis를 사용함으로써 개발자의 부담을 덜어주고 생산성 향상에도 도움이 됩니다. 기존 JDBC를 이용하면서 소스 안에 SQL문을 작성하던 방식이 SQL문을 xml파일에 작성함으로써 SQL 코드수정이 자유롭고 가독성도 좋아집니다.

 

 

먼저 스프링 프로젝트를 하나 생성합니다

 

 

프로젝트 이름을 정하기

'Spring MVC Project'를 선택 후 'Next'

 

 

패키지 이름 지정 후 'Finish'

 


 

[Dependencies Injection]

 

 

'pom,xml' 코드부터 수정합니다
노란박스 안의 부분을 변경해주세요

글을 쓰고 있는 현재의 최신 버전이 5.2.7이라서 저는 5.2.7로 수정했습니다

 

 

가장 아래로 내려가서 JDK 버전도 1.8로 변경해줍니다

 

 

이제 각종 'Dependency'들을 주입해야 합니다
DI를 하는 방법이 두 가지가 있습니다

홈페이지로 들어가서 버전을 확인하고 코드를 복사/붙여넣기 하는 방법
https://happy-inside.tistory.com/59

 

[Maven] 메이븐 JSP/서블릿 라이브러리 설정하기

메이븐 서블릿 JSP 라이브러리 설정하기 본 포스팅은 제가 유튜브 뉴렉처님 메이븐 강의를 공부하면서 내용을 정리하는 공간입니다 만약 저와 똑같이 공부를 진행해보고 싶으시다면 메이븐 카��

happy-inside.tistory.com

 

이클립스에 미리 다운받아놓고 필요할 때마다 꺼내쓰는 방법(추천)
https://happy-inside.tistory.com/61

 

[Maven] 메이븐 라이브러리 인덱스 검색

메이븐 이클립스에서 인덱스 검색하기 본 포스팅은 제가 유튜브 뉴렉처님 메이븐 강의를 공부하면서 내용을 정리하는 공간입니다 만약 저와 똑같이 공부를 진행해보고 싶으시다면 메이븐 카테

happy-inside.tistory.com

 

그냥 단순하게 따라하시는 분들은 그냥 밑에 코드 붙여넣으시면 됩니다

 

 

혹시 junit이 4.12 버전이 아니라면 4.12로 수정해주세요

노란박스 밑에서부터 코드 추가

 

		<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>5.2.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>5.2.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-dbcp2</artifactId>
			<version>2.6.0</version>
		</dependency>
		<dependency>
			<groupId>org.mariadb.jdbc</groupId>
			<artifactId>mariadb-java-client</artifactId>
			<version>2.3.0</version>
		</dependency>

 


 

[ root-context.xml ]

 

 

'root-context.xml' 로 들어가서 'Namespaces'탭 클릭

 

 

노란박스 5개 요소 체크하기

 


<!-- MariaDB JDBC DataSource -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
		<property name="url" value="jdbc:mariadb://localhost:3306/test"/>
		<property name="username" value="root" />
		<property name="password" value="001025" />
	</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>

 

'Source'탭으로 가서 DB연결 코드 추가

 


 

[ mybatis-config.xml ]

 

 

[src] - [main] - [resources] - 'mybatis-config.xml' 파일 생성

 


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

</configuration>

 

 

[src] - [main] - [resources] - 'mappers' 패키지를 만들고 그 안에 'testMapper.xml' 생성

 


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="test.mappers.testMapper">

</mapper>

 


[ 클래스 파일 만들기 ]

 

 

이제 연동이 잘 되는지 테스트 해보겠습니다

위의 경로에 클래스 파일 두 개를 만들어주세요

 

[ DBConnectionTest.java ]


package com.spring.maria;

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("DB연결 성공");
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

[ MyBatisTest.java ]

 


package com.spring.maria;

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 tesstFactory() {
		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]

 

 

초록색 박스와 콘솔창에 'DB연결 성공'이 뜨면 정상적으로 연동이 된 겁니다

부디 한번에 되셨으면 좋겠습니다

 


 

자기계발하는 개발자

'인생최적화'

 

 

반응형

댓글