본문 바로가기
Spring/Spring

[Spring] 에서 Mybatis 세팅 및 설정하기

1. Mybatis란 무엇일가?

 

Mybatis는 일종의 DB프레임워크 입니다.

Mybatis를 사용함으로써 얻는 장점은 다음과 같습니다.

 

- 코드의 길이가 줄어든다

- 작업 분배에 도움이 된다

- 기능별로 구분되어 관리되기 때문에 유지보수에 도움이 된다

- SQL문이 애플리케이션 소스 코드로부터 분리하여 관리된다

- 어떤 프로그래밍 언어로도 구현이 가능해진다(높은 이식성)

- 무료이다...

 

 

 

 

 

2. Mybatis Spring프레임워크에 설정하기

 

Spring에 Mybaits를 설정하기 위해서는 우선 Pom.xml에 dependency를 추가하여 라이브러리를 받아야 합니다. Mybatis뿐만 아니라 별도의 jdbc와 연관된 라이브러리들도 같이 받아야 하는데요 아래의 내용들을 pom.xml에 추가만 하면 되기 때문에 특별이 어려운점은 없습니다. 우선은 DB 종류에 상관없이 공통부분입니다. 참고로 DB 커넥션풀은 요즘 핫한(?) hikariCP를 사용했습니다.

 

		<!-- JDBC관련 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>	
		
		<!-- HikariCP -->
		<dependency>
			<groupId>com.zaxxer</groupId>
			<artifactId>HikariCP</artifactId>
			<version>2.7.8</version>
		</dependency>

		<!-- 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>

 

 

그 다음은 DB종류에 따른 추가 부분입니다. 각자 사용하는 DB의 라이브러리를 추가하면 되는데 해보지는 않았지만 Oracle의 경우에는 좀 더 복잡한 과정이 있다고 알고 있습니다. 여기서 저는 Maria DB를 사용했는데 각자 사용하는 DB의 dependency를 찾아서 추가하시면 됩니다.

 

		<!-- Maria DB -->
		<dependency>
		    <groupId>org.mariadb.jdbc</groupId>
		    <artifactId>mariadb-java-client</artifactId>
		    <version>2.4.1</version>
		</dependency>

 

 

 

여기까지 하셨다면 필요한 라이브러리에 대한 세팅은 끝났습니다. 이제는 root-context.xml 에서 DB연결과 관련된 설정값을 세팅해야 합니다. 아래의 코드블럭 세개를 확인하면서 본인의 상황에 맞게 작성해주면 되겠습니다.

 

<?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"
	xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		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-4.3.xsd">

 

  <beans:bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
    <beans:property name="driverClassName" value="org.mariadb.jdbc.Driver" />
    <beans:property name="url" value="jdbc:mariadb://IP:포트번호/스키마" />
    <beans:property name="username" value="계정명" />
    <beans:property name="password" value="비밀번호" />
  </beans:bean>

 

	<!-- HikariCP configuration -->
	<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
		<constructor-arg ref="hikariConfig" />
	</bean>
    
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
    
    	<!-- mapper, service의 경로 -->
    	<mybatis-spring:scan base-package="com.test.sample.*.mapper" />
	<context:component-scan	base-package="com.test.sample.*.service" />

 

 

 

 

 

3. DB에 접근해서 값 가져오기

 

위에서 Mybatis에 대한 설정은 모두 완료했습니다. 그렇다면 정상적으로 DB에 접근해서 값을 가져올 수 있는지 확인을 하는 과정을 알아보겠습니다.

 

우선 DB접근 순서는 다음과 같습니다. 

Controller.java -> Service.java(Interface) -> ServiceImpl.java -> Mapper.java -> Mapper.xml

당연한 이야기 이지만 개발자의 상황에 따라 Service부분을 생략하거나 다른 방식으로 접근하셔도 상관은 없습니다.

 

 

@Controller
public class SampleController {
	
	@Autowired
	SampleService sampleService;
	
	@RequestMapping(value = "index.do", method = RequestMethod.GET)
	public String home() {
		
		int sample = sampleService.sample();
		System.out.println(sample);
		
		return "sample/sample.tiles";
	}
	
}

 

public interface SampleService {
	
	public int sample();
}

 

@Service
public class SampleServiceImpl implements SampleService {

	@Autowired SampleMapper sampleMapper;
	
	
	public int sample() {
		return sampleMapper.sample();
	}

}

 

public interface SampleMapper {

	public int sample();
}

 

<mapper namespace="com.test.sample.sample.mapper.SampleMapper">

	<select id="sample" resultType="int">
		SELECT COUNT(*) FROM BOARD
	</select>
	
</mapper> 

 

 

 

 

 

 

댓글