DB 연결기술/MyBatis

[MyBatis] MySQL 연결하기

pogles 2023. 3. 6. 14:53

MyBatis 는 spring 를 사용해도 약간의 설정이 필요하다.

 

이 포스팅에서는 Datasource 를 직접 bean으로 등록하는 경우와, 자동으로 등록된 Datasource 를 사용할 경우로 나눈다.

 

MyBatis – 마이바티스 3 | 시작하기

 

MyBatis – 마이바티스 3 | 시작하기

 

mybatis.org

 

 

1.  Datasource 를 직접 등록할 경우

* 주의점 MyBatis, MySQL 은 Spring 버전에 맞게 사용해야한다.

* Datasource 를 직접 bean 으로 등록하고자 하는 경우이다.

 

1) dependency(Maven)

<!-- MyBatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>버전</version>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>버전</version>
</dependency>

<!-- MySQL -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>버전</version>
</dependency>

 

 

2) application.properties : MySQL 정보 설정

* spring boot 에서는 hikari cp 가 기본이나, 직접 datasource 를 사용자설정으로 등록하므로 hikari 속성을 사용

// 직접 datasource 를 bean 으로 설정할 경우
spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.jdbc-url=jdbc:mysql:"연결할 DB URL"
spring.datasource.hikari.username=root
spring.datasource.hikari.password=1234567890

 

 

+ spring.data.source.hikari.jdbc-url 오류해결

2023.03.06 - [오류해결] - [Spring Boot] MySQL 연결실패 - Failed to configure a DataSource

 

[Spring Boot] MySQL 연결실패 - Failed to configure a DataSource

해결방법 spring.datasource.hikari.jdbc-url 을 spring.datasource.url 로 변경

pogle-jeong.tistory.com

 

3) Bean 등록

  • 공식문서에서 권장되는 코드
  • 적용하기 위해서 "classpath:/ ~~ " 부분을 알맞게 수정해서 사용해주면 된다.
  • MyBatis 는 SqlSessionFactory 인스턴스가 사용하므로 별도의 빌드가 필요하다.
package mul.cam.a;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

@Configuration
@PropertySource("classpath:/application.properties")
public class DatabaseConfig {

	@Bean
	@ConfigurationProperties(prefix = "spring.datasource.hikari")
	public HikariConfig hikariConfig() {
		return new HikariConfig();
	}
	
	@Bean
	public DataSource dataSource() {
		DataSource dataSource = new HikariDataSource(hikariConfig());
		return dataSource;
	}
	
	@Bean
	public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
		System.out.println("DatabaseConfig sqlSessionFactory");
		
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		sqlSessionFactoryBean.setDataSource(dataSource);
		
		Resource[] arrResource = new PathMatchingResourcePatternResolver().getResources("classpath:sqls/*.xml");
		sqlSessionFactoryBean.setMapperLocations(arrResource);
		sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
		
		return (SqlSessionFactory)sqlSessionFactoryBean.getObject();		
	}
	
	@Bean
	public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
		return new SqlSessionTemplate(sqlSessionFactory);
	}	
}

 


2. 자동설정된 Datasource 를 사용할 경우

* 주의점 MyBatis, MySQL 은 Spring 버전에 맞게 사용해야한다.

* 쉽게 설정하여 사용할 수 있도록 mybatis-spring-boot-starter 를 제공한다.

 

1) dependencies(Maven)

* spring boot 버전이 3.0 이상일 경우 mybatis-spring-boot-starter 버전은 3.0.1 사용한다

<!-- mybatis : spring boot starter -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>버전</version>
</dependency>

<!-- MySQL -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>버전</version>
</dependency>

 

2) application.properties : MySQL 정보 설정

* 자동등록된 datasource 를 사용한다.

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.jdbc-url=jdbc:mysql:"연결할 DB URL"
spring.datasource.username=root
spring.datasource.password=1234567890

 

 

MyBatis-Spring-Boot-Starter를 사용하는 경우, 기본적으로 설정해주기 때문에 별도로 SqlSessionFactory 를 설정하지 않아도 된다. 따라서 간단하게 연결할 수 있는 장점이 있으므로 특별한 경우가 아닌 이상 사용하는 것이 좋을 듯 하다.

 

또한 Spring-Boot-Starter 에서 Datasource 에 관한 기본설정도 자동으로 해주므로 간편히 설정하여 사용할 수 있다.