MyBatis 프레임워크란?

MyBatis

원래는 iBatis이었는데  개발자들이 Apache 재단에서 Google code로 옮기면서…

MyBATIS
MyBATIS

Spring Framework를 하면서 가장 궁금했던게 “데이터베이스에 접속하고 조회, 수정, 삭제 등 Model에 기술된 행위를 하는데 왜 소스코드에 SQL문이 보이지 않을까?” 이었다. 그 해답이 바로 여기 “MyBatis”에 있다.

위키피디아에 검색해보면 다음과 같이 서술 되어있다.

iBATIS(아이바티스)는 SQL에 기반한 데이터베이스와 자바, 닷넷(.NET), 루비(Ruby) 등을 연결시켜 주는 역할을 하는 영속성 프레임워크(Persistence Framework)이다. 이러한 연결은 프로그램의 소스코드에서 SQL 문장을 분리하여 별도의 XML 파일로 저장하고 이 둘을 서로 연결시켜주는 방식으로 작동한다.

따라서 SQL의 변동이 생기더라도 프로그램이 아닌 XML파일만 수정하면 되기 때문에 유연성도 높고 코드와 분리 되어 있어 가독성 또한 높다.

 

“Spring Framework”에서 “MyBatis”를 사용하려면?

우선 Maven을 이용하여 MyBatis와 사용할 DB의 클라이언트를 Dependency에 추가하여 해당 라이브러리들을 내려받게 해야 한다. 다음 코드를 pom.xml에 입력하여 의존성을 추가한다.

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.2</version>
</dependency>
 
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.2.0</version>
</dependency>
 
<dependency> <!-- 여기 애러나면 spring framework 버전을 직접 쓴다 -->
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${org.springframework-version}</version>
</dependency>
 
<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>

글쓴이는 localhost에 Spring Framework를 사용, 데이터베이스는 학교 서버를 이용할 생각이다.

MyBatis에 사용될 설정 파일은 다음과 같다.

  • context-datasource.xml : 사용할 DB Driver, Host, ID, Password 정보
  • context-mapper.xml : SQL이 쓰여진  xml 파일 매핑 정보
  • *_SQL.xml : SQL이 쓰여진 xml 파일

우선 위 두개의 context파일을 src/main/resources/config/spring 하위에 생성한다. (또한 생성된 두 설정파일이 읽힐 수 있도록 web.xml에서 편집을 해준다.)

MyBatis설정파일
MyBatis설정파일

 

context-datasource.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/jdbc  http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd">
     
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://주소/스키마"/>
        <property name="username" value="아이디"/>
        <property name="password" value="비밀번호"/>
    </bean>
</beans>

스키마는 사용할 MySQL의 데이터베이스 이름이다.

context-mapper.xml 파일을 열어 실제 SQL이 적힌 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>

위 코드에서 “sqlSession” bean을 보면 속성으로 property name과 ref를 볼 수 있다. 이는 context-datasource.xml에서의 bean id가 “dataSource”를 갖는 것을 참조한다는 의미이다.

그 밑에줄의 mapperLocations는 실제 SQL이 적힌 xml 파일의 경로를 말한다. “classpath”에 그 경로를 정의하고 있다. (/mapper … 이므로 src/main/resources 아래 mapper 디렉토리를 만든다.)

마지막 sqlSessionTemplate은 MyBatis와 스프링을 연동하는 모듈이다.

Spring Framework와 MyBatis를 연동하는 설정은 끝났다.

Data Access Object 에서 마지막에 설명했던 sqlSessionTemplate(연동모듈)을 사용하여 작성하면 된다.

 

참고자료

http://addio3305.tistory.com/62 – 스프링(Spring) 개발 – (9) Mybatis (마이바티스) 연동하기

%d 블로거가 이것을 좋아합니다: