YOUNG-JIN.OH
웃어라. 온 세상이 너와 함께 웃을 것이다.
울어라. 너 혼자만 울게 될 것이다.

Spring Boot, DataSource 및 MyBatis 설정

참고 사이트:

IntelliJ IDEA 에서 프로젝트 생성시 Spring Initializr, Type “Gradle”, Java Version “11” 기준으로 Dependencies 는 “SQL – MySQL, MyBatis” 를 선택해서 프로젝트를 생성합니다.

생성된 프로젝트를 바로 실행시켜봅니다.

DataSource 설정이 안되어 있다는 내용이 표시가 되는데, DataSource 및 MyBatis 설정은 파일에 자신의 환경에 맞게 아래 내용처럼 저장합니다.

application.properties

spring.datasource.continue-on-error=false
spring.datasource.separator=;
spring.datasource.jmx-enabled=false
spring.datasource.name=youtube
spring.datasource.platform=all
spring.datasource.sql-script-encoding=utf-8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.7.102/youtube?autoReconnect=true&useUnicode=true&charaterEncoding=utf-8
spring.datasource.username=youtube_master
spring.datasource.password=password!

# Mapper를 사용하는 경우에는 불필요합니다.
mybatis.config-location=classpath:mybatis/mybatis-config.xml
mybatis.check-config-location=true

MyBatis 설정을 위해서는 다음과 같이 구성합니다.

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>
    <settings>
        <setting name="cacheEnabled" value="false"/>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <mappers>
        <mapper resource="mybatis/query/common.xml"/>
    </mappers>
</configuration>

common.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="com.example.demo">
    <select id="selectTest" parameterType="int" resultType="String" >
	select 1 + 1 + #{number}
    </select>
</mapper>

CommonDAO.java

package com.example.demo;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class CommonDAO {

    @Autowired
    private SqlSession sqlSession;

    public String selectTest(int number) {
        return sqlSession.selectOne("selectTest", number);
    }
}

테스트 코드는 다음과 같이 간단하게 구현하였습니다.

package com.example.demo;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

    @Autowired
    private CommonDAO commonDAO;

    @Test
    public void selectTest() {
        var result = commonDAO.selectTest(100);

        System.out.println(result);
    }
}

이렇게 mybatis-config.xml 설정파일과 실제 쿼리 xml을 사용하는 DAO (Data Access Object) 를 구현하는 방식 외에도 MyBatis 에서 제공하는 @Mapper를 이용하면 좀 더 간단하게 사용할 수 있으며, “No MyBatis mapper was found in ‘[com.example.demo]’ package. Please check your configuration.” 메시지가 뜨지 않게 됩니다.

TestMapper.java

package com.example.demo;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface TestMapper {

    String selectTestMapper(int number);
}

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="com.example.demo.TestMapper">
    <select id="selectTestMapper" parameterType="int" resultType="String" >
	select 1 + 1 + #{number}
    </select>
</mapper>

이렇게 2개의 파일만 있으면 되지만, TestMapper.java 의 패키지 경로와 resource 상의 TestMapper.xml 패키지 경로가 동일해야 하고 namespace도 일치해야 합니다.

package com.example.demo;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

    @Autowired
    private TestMapper testMapper;

    @Test
    public void selectTestMapper() {
        var result = testMapper.selectTestMapper(200);
        System.out.println(result);
    }
}

마지막으로 Spring Boot 프로젝트 생성시에는 MariaDB 선택항목이 없었으므로, 아래와 같이 MariaDB 드라이버로 선택해주면 최적의 연결성을 만들 수 있습니다.

build.gradle

...
//    runtimeOnly 'mysql:mysql-connector-java'
    runtimeOnly group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '2.4.0'
...

application.properties

...
#spring.datasource.url=jdbc:mysql://192.168.7.102/youtube?autoReconnect=true&amp;useUnicode=true&amp;charaterEncoding=utf-8
spring.datasource.url=jdbc:mariadb://192.168.7.102/youtube?autoReconnect=true&amp;useUnicode=true&amp;charaterEncoding=utf-8

#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
...

개인적으로는 DAO 방식을 더 선호합니다. 그리고 MyBatis 는 복잡한 통계의 조회 용도로만 사용하기 위해 설정한 것이고 그 외에는 JPA (Java Persistent API) + QueryDSL 로 구현하도록 하겠습니다.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.