스터디/스프링

[Spring Boot]Spring Boot와 Mybatis 연결

짐배몬 2020. 10. 10. 23:15

[참조블로그]https://charlie-choi.tistory.com/218

Pom.xml 에 Mybatis Dependency 추가

<!-- mybatis 설정 -->
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.3.2</version>
</dependency>
<!-- //mybatis 설정 -->

 

application.properties 에서 환경설정 값 추가

#DataSource Setting
spring.datasource.hikari.driver-class-name=org.mariadb.jdbc.Driver #드라이버
spring.datasource.hikari.jdbc-url=jdbc:mysql://[host]:[port]/[schema]?[properties] #URL
spring.datasource.hikari.username=[username]
spring.datasource.hikari.password=[password]
spring.datasource.hikari.idle-timeout=300000 #자유
spring.datasource.hikari.connection-timeout=600000 #자유

 

DatasourceConfiguration 에서 빈생성

import javax.sql.DataSource;

import com.zaxxer.hikari.HikariDataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
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.core.io.support.PathMatchingResourcePatternResolver;

@Configuration //설정파일임을 알려주는 어노테이션
@MapperScan(basePackages = "com.saleinfo.core.*.service.impl", sqlSessionFactoryRef = "sqlSessionFactory") //메퍼를 찾는 어노테이션 Mapper 위치와, SessionFactory 이름 설정
public class DataSourceConfiguration {

    @Bean(name = "dataSource") //빈생성
    @ConfigurationProperties(prefix ="spring.datasource.hikari") //application.properties 에서 prefix 가 들어간 항목을 찾아서 가져옴
    public DataSource DataSource(){
        return new HikariDataSource(); //써본적은 없는데 커넥션 풀 성능이 뛰어나다고 한다.
    }   

    @Bean(name = "sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(
        @Qualifier("dataSource") DataSource dataSource, //위에서 생성해준 dataSource 빈 가져오기
        ApplicationContext applicationContext) throws Exception{
            SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); //팩토리 빈 생성
            sqlSessionFactoryBean.setDataSource(dataSource); //dataSource 지정
            sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("sqlMapper/**/*.xml")); //src/main/resource 위치에서 sqlMapper경로 지정 
        
            return sqlSessionFactoryBean.getObject();
        }
    
    @Bean(name = "sqlSession")
    public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) throws Exception{
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

 

SQL.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.saleinfo.core.main.service.impl.MainServiceMapper">
    <select id="selectTitle" resultType="String">
        <![CDATA[
            쿼리문
        ]]>
    </select>
</mapper>

 

Mapper.java 생성

@Mapper
public interface MainServiceMapper {
    String selectTitle(); 
}

 

Service.java 생성

@Service("mainService")
public class MainServiceImpl implements MainService{

    @Autowired
    MainServiceMapper mainServiceMapper;
    
    @Override
    public String main() {
       return mainServiceMapper.selectTitle();
    }
    
}

 

이후 호출하면 된다.