6. 마이바티스와 스프링 부트 연동
스프링 부트와 마이바티스를 연동하는 방법에 대해 다룹니다. 스프링 부트는 마이바티스와 함께 사용하기 쉬운 프레임워크로, 기본적인 설정 작업을 통해 마이바티스를 쉽게 사용할 수 있습니다. 이번 섹션에서는 스프링 부트와 마이바티스를 연동하기 위한 기본적인 설정 방법에 대해 다룹니다. 이를 위해 마이바티스 스프링 부트 스타터를 이용하여 스프링 부트 프로젝트에 마이바티스를 추가하고, 마이바티스 설정 파일을 작성하는 방법을 다룹니다. 이를 통해 스프링 부트와 마이바티스를 연동하는 방법을 익힐 수 있습니다.
6.1. 마이바티스 스프링 부트 스타터 사용
6.1.1. 의존성 추가
마이바티스 스프링 부트 스타터를 사용하면 스프링 부트와 마이바티스를 쉽게 연동할 수 있습니다. 우선, 프로젝트의 의존성에 다음과 같이 마이바티스 스프링 부트 스타터를 추가해 줍니다.
Maven 기반 프로젝트인 경우, pom.xml 파일에 다음 내용을 추가합니다.
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
Gradle 기반 프로젝트인 경우, build.gradle 파일에 다음 내용을 추가합니다.
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0'
6.1.2. 자동 설정 사용
마이바티스 스프링 부트 스타터는 스프링 부트의 자동 설정 기능을 이용하여 필요한 설정을 자동으로 해줍니다. 이를 통해 개발자는 별도의 설정 없이도 마이바티스를 사용할 수 있습니다. 단, 몇 가지 설정은 직접 해주어야 합니다.
application.properties 또는 application.yml 파일에 다음과 같이 데이터베이스 연결 정보와 마이바티스 설정 파일 경로를 지정해 줍니다.
application.properties 파일의 경우
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=my-password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis.config-location=classpath:mybatis/mybatis-config.xml
application.yml 파일의 경우
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
username: root
password: my-password
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
스프링 부트 애플리케이션을 실행하면 자동으로 설정된 마이바티스 설정이 적용되어 데이터베이스와 연동되는 것을 확인할 수 있습니다.
6.2. SqlSessionFactory 및 SqlSessionTemplate 생성
6.2.1. SqlSessionFactory 빈 생성
SqlSessionFactory는 마이바티스에서 핵심 역할을 하는 객체로, 데이터베이스 연결 및 SQL 실행을 관리합니다. 스프링 부트와 마이바티스를 연동할 때, SqlSessionFactory를 빈으로 등록해야 합니다. 다음은 SqlSessionFactory 빈을 생성하는 예제입니다.
@Configuration
public class MybatisConfig {
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis/mybatis-config.xml"));
return sqlSessionFactoryBean.getObject();
}
}
6.2.2. SqlSessionTemplate 빈 생성
SqlSessionTemplate은 마이바티스에서 제공하는 SqlSession 인터페이스의 구현체로, SQL 실행 및 트랜잭션 관리를 담당합니다. 스프링 부트와 마이바티스를 연동할 때, SqlSessionTemplate 빈을 등록해야 합니다. 다음은 SqlSessionTemplate 빈을 생성하는 예제입니다.
@Configuration
public class MybatisConfig {
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
// (이전 코드 생략)
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
SqlSessionFactory와 SqlSessionTemplate 빈이 생성되었습니다. 마이바티스를 사용하여 데이터베이스 작업을 수행할 때, 이 빈들을 이용하여 연동 작업을 수행할 수 있습니다.
6.3. 트랜잭션 관리 설정
6.3.1. @Transactional 어노테이션 사용
스프링에서 트랜잭션 관리를 위해 제공하는 @Transactional 어노테이션을 사용하면, 메서드 레벨에서 트랜잭션을 적용할 수 있습니다. 이 어노테이션은 메서드가 실행될 때 트랜잭션을 시작하고, 정상적으로 종료되면 트랜잭션을 커밋하며, 예외가 발생하면 롤백합니다.
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Transactional
public void createUser(User user) {
userRepository.insert(user);
// 여기서 예외가 발생하면, 트랜잭션이 롤백됩니다.
}
}
6.3.2. 트랜잭션 설정을 위한 DataSourceTransactionManager 생성
스프링에서 트랜잭션 관리를 위해 DataSourceTransactionManager를 사용하여 DataSource를 설정해야 합니다. 다음은 DataSourceTransactionManager를 빈으로 등록하는 예제입니다.
@Configuration
public class MybatisConfig {
// (이전 코드 생략)
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
스프링 부트 프로젝트에서 트랜잭션 관리가 설정되었습니다. @Transactional 어노테이션을 사용하여 간편하게 트랜잭션을 관리할 수 있으며, DataSourceTransactionManager를 통해 트랜잭션 설정을 할 수 있습니다.
'GD's IT Lectures : 기초부터 시리즈 > 스프링 부트(Spring Boot) & 마이바티스(Mybatis) 연동' 카테고리의 다른 글
[스프링 부트(Spring Boot) & 마이바티스(Mybatis) 연동] 고급 기능 (0) | 2023.05.07 |
---|---|
[스프링 부트(Spring Boot) & 마이바티스(Mybatis) 연동] CRUD 애플리케이션 예제 (0) | 2023.05.07 |
[스프링 부트(Spring Boot) & 마이바티스(Mybatis) 연동] 마이바티스 기초 (0) | 2023.05.06 |
[스프링 부트(Spring Boot) & 마이바티스(Mybatis) 연동] 데이터베이스 설정 (0) | 2023.05.06 |
[스프링 부트(Spring Boot) & 마이바티스(Mybatis) 연동] 스프링 부트 기초 (0) | 2023.05.06 |
댓글