개발용 메모장...

[Java]/[Spring]

[SpringBoot] MyBatis 설정

redeyesboy 2024. 8. 26. 12:11

 

1. 의존성 추가

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>3.0.3</version>
</dependency>
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter-test</artifactId>
	<version>3.0.3</version>
	<scope>test</scope>
</dependency>
<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-lang3</artifactId>
</dependency>

 

2. Mapper 폴더 생성

- Mapper 폴더가 존재하지 않을경우, 오류가 발생.

 

3. MapperScan용 Annotation 추가

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface StoreMapper {

}

 

4. MyBatis 설정 추가

@Configuration
@RequiredArgsConstructor
@MapperScan(
	basePackages = Constants.BASE_PACKAGE
	, annotationClass = StoreMapper.class
	, sqlSessionTemplateRef = "sqlSessionTemplate"
)
public class MyBatisConfig {

	private final ApplicationContext applicationContext;

	@Primary @Bean
	SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
		org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
		configuration.setCacheEnabled(false);
		configuration.setDefaultExecutorType(ExecutorType.REUSE);
		configuration.setDefaultStatementTimeout(25);
		configuration.setMapUnderscoreToCamelCase(true);
		configuration.setJdbcTypeForNull(JdbcType.NULL);
		configuration.setCallSettersOnNulls(true);
		Resource[] mapperLocations = ArrayUtils.addAll(
			applicationContext.getResources("classpath:/mapper/store/**/*.xml")
		);
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		sqlSessionFactoryBean.setDataSource(dataSource);
		sqlSessionFactoryBean.setConfiguration(configuration);
		sqlSessionFactoryBean.setMapperLocations(mapperLocations);
		return sqlSessionFactoryBean.getObject();
	}

	@Primary @Bean
	SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
		return new SqlSessionTemplate(sqlSessionFactory);
	}

}

 

- config 관련 설정은 아래 링크 참조.

https://mybatis.org/mybatis-3/ko/configuration.html#settings

 

mybatis – 마이바티스 3 | 매퍼 설정

매퍼 설정 마이바티스 XML 설정파일은 다양한 설정과 프로퍼티를 가진다. 문서의 구조는 다음과 같다.: configuration properties 이 설정은 외부에 옮길 수 있다. 자바 프로퍼티 파일 인스턴스에 설정할

mybatis.org

 

5. 사용

- interface Dao 추가 예시

-- @StoreMapper 선언시에만 MyBatis mapper scan이 수행되어짐.

@StoreMapper
@Mapper
public interface MainDao {

}

 

- mapper.xml 추가 예시

-- namespace는 Dao의 패키지명과 동일하여야 함.

<?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="co.kr.store.bo.main.main.MainDao">



</mapper>