본문으로 바로가기

목차

    0. 환경

    • windows10
    • openjdk version "11" 2018-09-25
    • IntelliJ Tool
    • Spring Boot 2.5.6
    • Gradle Project 
    • MyBatis + Mysql + HikariCP를 이용해 DB(Mysql) 연동할 프로젝트입니다.

    1. DB 연결 정보 설정

    • resources/application.properties에 다음과 같이 본인의 Mysql DB 연결 정보를 입력합니다.
    spring.datasource.hikari.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.hikari.url=jdbc:mysql://localhost:3306/?autoReconnect=true&useSSL=false&amp&serverTimezone=UTC
    spring.datasource.hikari.username=root
    spring.datasource.hikari.password=******

    2. HikariCP 설정

    • com/test/api/config/DBConfig.java
    • 스프링 부트가 아닌 스프링에서는 일반적으로 xml파일을 이용해 사용하지만 스프링 부트에서 application.properties 또는 클래스를 만들어서 사용합니다. 
    • MyBatisHikariCP 연동을 위한 설정 클래스 파일(DBConfig.java) 생성합니다.
    package com.test.api.config;
    
    import com.zaxxer.hikari.HikariConfig;
    import com.zaxxer.hikari.HikariDataSource;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.PropertySource;
    
    import javax.sql.DataSource;
    
    @Configuration
    @PropertySource("classpath:/application.properties")
    public class DBConfig {
    
        @Autowired
        private ApplicationContext applicationContext;
    
        @Bean
        @ConfigurationProperties(prefix="spring.datasource.hikari")
        public HikariConfig hikariConfig() {
            return new HikariConfig();
        }
    
        @Bean
        public DataSource dataSource() throws Exception {
            DataSource dataSource = new HikariDataSource(hikariConfig());
            return dataSource;
        }
    
    }
    • 스프링 부트를 실행합니다. 콘솔에 다음과 같이 출력되면 HikariCP를 이용해 DB 접속이 된 것입니다.

    3. MyBatis 설정

    • MyBatis 설정 관련 빈으로 com/test/api/config/DBConfig.java 파일에 추가로 작성합니다.
    @Configuration
    @PropertySource("classpath:/application.properties")
    public class DBConfig {
    
        //( ... ) 생략
    
        @Bean
        public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
            SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
            sqlSessionFactoryBean.setDataSource(dataSource);
            sqlSessionFactoryBean.setTypeAliasesPackage("com.test.api.domain");
            sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:/mapper/*.xml"));
            return sqlSessionFactoryBean.getObject();
        }
    
        @Bean
        public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }

     

    [MyBatis DTO Alias]

    • MyBatis를 이용해 DB(Mysql)에서 읽어온 데이터를 담아올 도메인(DTO)의 패키지 경로를 설정하게 되면 Mapper 파일에 편하게 클래스 명만 작성해서 사용할 수 있습니다.
    • 해당 설정에 맞게 패키지를 미리 생성해 줍니다.
      • com.test.api.domain
    sqlSessionFactoryBean.setTypeAliasesPackage("com.test.api.domain");
    #설정 하지 않을 경우 Mapper 파일의 resultType
    <select id="test" parameterType="map" resultType="com.test.api.domain.Test">
    	SELECT id, macaddress, ip
    	FROM node
    	LIMIT #{from}, #{to}
    </select>
    
    #설정 할 경우 Mapper 파일의 resultType 타입
    <select id="test" parameterType="map" resultType="Test">
    	SELECT id, macaddress, ip
    	FROM node
    	LIMIT #{from}, #{to}
    </select>

     

    [mapper 파일 경로]

    • 쿼리를 작성할 mapper 파일을 생성해 둘 경로입니다. 해당 경로에 맞게 mapper 디렉터리를 생성해주세요.
      • resources/mapper
    • 해당 경로에. xml로 끝나는 파일들을 스캔해서 설정합니다.
    sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:/mapper/*.xml"));