본문 바로가기

JAVA/Spring

Spring Mybatis Generator - 기본 사용법

Spring에서 DB 연동을 할 때 Mybatis나 JPA(Hibernates, Spring Data JPA) , Spring Data JDBC 등 다양한 라이브러리나 프레임워크가 존재한다. 현재는 Mybatis만 주로 사용을 해봤다. 사내에서 개발되는 프로젝트들이 Mybatis를 사용해서... 물론 트렌드가 Spring Data JPA나 Spring Data JDBC라고 해서 관련해서도 공부를 해볼려고 한다.
Mybatis는 JDBC를 통한 연결, SQL Query 등을 설정과 매핑을 대신해주는 녀석이라고 한다. 그치만 쿼리문과 mapper, model 들을 직접 다 개발자가 입력해야 되는데 은근 시간을 잡아 먹는다. 그래서 나온 것이 Myabtis Generator이다. 이 녀석은 model, mapper 및 DB 연결 부분까지 설정파일만 만들고 run을 하면 자동으로 생성해주는 녀석이다. 이걸 사용하면 단순 작업에 드는 시간을 많이 줄일 수 있었다.
 
intellij + maven 구조로 프로젝트를 생성해서 사용해봤다.

1. 설치

  • maven
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.4.0</version>
                <executions>
                    <execution>
                        <id>Generate MyBatis Artifacts</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
 
  • gradle
plugins {
    ...
    id "com.thinkimi.gradle.MybatisGenerator" version "2.2"
}
 
mybatisGenerator {
    verbose = true
    configFile = 'src/main/resources/generatorConfig.xml'
 
    dependencies {
        mybatisGenerator 'org.mybatis.generator:mybatis-generator-core:1.4.0'
        mybatisGenerator 'mysql:mysql-connector-java:8.0.22'
        mybatisGenerator 'org.mariadb.jdbc:mariadb-java-client:2.7.1'
    }
}
 
configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
 
    mybatisGenerator
}
위와 같이 해주어야 gradle Tasks내에 util 아래에 mbGenerator 라는 것이 생긴다. 다른 사람이 만든 라이브러리가 추가로 필요한 듯 하다. 이런 부분에서 maven이 처음 다루기에는 좀 더 편하지 않나라는 생각을 해본다.

2.GeneratorConfig.xml 파일 생성 및 설정

Mybatis Generator를 이용해서 kotlin 버전을 포함하여 4가지 방식으로 설정할 수 있다.

  • MyBatis3 버전
<!DOCTYPE generatorConfiguration PUBLIC
        "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"
        >
<generatorConfiguration>
    <context id="sampledb" targetRuntime="MyBatis3">
        <jdbcConnection driverClass="org.mariadb.jdbc.Driver"
                        connectionURL="jdbc:mariadb://<IP>:<port>/<DB 명>" userId="<ID>"
                        password="<Password>!"/>
 
 
        <javaModelGenerator targetPackage="com.example.demo.model.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
 
 
        <sqlMapGenerator targetPackage="mapper"  targetProject="src/main/resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
 
 
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo.mapper"  targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        <table tableName="cmb_user">
            <generatedKey column="idx" sqlStatement="JDBC"/>
        </table>
    </context>
</generatorConfiguration>
 
해당 버전의 경우에는 일반적으로 많이 쓰는 방식으로 생성이 된다. Mapper Interface와 DTO 그리고 Mapper XML이 생성이 된다. 네이밍은 테이블 명에 따라서 생성이 된다. 
 

 
간혹, 위에 처럼 세팅하고 maven run을 하면 오류가 발생하는 경우가 있다. 그 경우에는 아래와 같이 classPathEntry를 추가 해준다.
<generatorConfiguration>
    <classPathEntry location="<HomePath>/.m2/repository/org/mariadb/jdbc/mariadb-java-client/2.4.4/mariadb-java-client-2.4.4.jar" />
 
    <context id="sampledb" targetRuntime="MyBatis3">
    ....
    ....
    ....
    <?context>
</generatorConfiguration>

그리고 table 내 column이 추가가 되었거나 변경이 되었으면 다시 generation을 해야 되는데, 이 때 기본적으로 mvn mybatis-generator:generate -f pom.xml 을 하게 되면 overwrite가 안된다. 따라서 overwrite 설정을 true로 해 놓은게 마음이 편하다. 아래와 같이 수정하고 run을 시키면 된다.

mvn -Dmybatis.generator.overwrite=true mybatis-generator:generate -f pom.xml
 
mybatis generator를 추가하고, 자동으로 model, mapper를 만든 것 까지 해봤다.
세부적인 설명과 나머지 3가지 버전으로 생성 시 어떻게 사용하는지는 곧 업뎃 예정...