[MyBatis] MySQL 연결하기
MyBatis 는 spring 를 사용해도 약간의 설정이 필요하다.
이 포스팅에서는 Datasource 를 직접 bean으로 등록하는 경우와, 자동으로 등록된 Datasource 를 사용할 경우로 나눈다.
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 에 관한 기본설정도 자동으로 해주므로 간편히 설정하여 사용할 수 있다.