티스토리 뷰
728x90
반응형
SqlSessionFactory
- MyBatis에서 SQL 세션을 생성하는 중요한 인터페이스
- 데이터베이스와의 연결을 설정하고 SQL 문을 실행하는데 사용되는 SQL 세션 객체를 생성
- SqlSessionFactory를 생성하면 MyBatis의 SqlSession을 생성하고 데이터베이스와의 상호 작용을 수행
- SqlSession은 SQL 쿼리를 실행하고 결과를 얻을 수 있는 인터페이스
@Configuration
public class MyBatisConfig {
@Bean
public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:mappers/*.xml")); // MyBatis Mapper XML 파일 경로
return sessionFactoryBean.getObject();
}
}
SqlSessionTemplate
- Spring과 MyBatis를 통합하여 데이터베이스 작업을 수행하는 편리한 방법을 제공하는 클래스
- MyBatis의 SqlSession을 더 편리하게 사용할 수 있으며, Spring의 트랜잭션 관리와 연동
- Spring의 트랜잭션 관리 기능과 함께 사용되는데, 트랜잭션 내에서 데이터베이스 작업을 수행하고 트랜잭션이 커밋되거나 롤백될 때 자동으로 SqlSession을 관리
@Configuration
@EnableTransactionManagement
public class MyBatisTransactionConfig {
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
MapperFactoryBean
- Mapper 인터페이스를 Spring Bean으로 생성하는 역할
- Mapper 인터페이스의 라이프사이클을 관리하고 Spring 애플리케이션 컨텍스트에 통합하는 역할
- @Mapper 주석을 사용하여 Mapper 인터페이스를 선언하면, MyBatis-Spring은 해당 Mapper 인터페이스에 대한 MapperFactoryBean 인스턴스를 자동으로 생성
Mapper 인터페이스
- Mapper 인터페이스는 MyBatis의 기능을 추상화하고 SQL 작업을 메소드로 정의하는 역할
- Mapper 인터페이스를 사용하면 SqlSessionTemplate을 명시적으로 사용하지 않아도 됨
@Mapper
public interface MyMapper {
MyData selectDataById(Long id);
void insertData(MyData data);
List<MyData> selectAllData();
}
@Service
public class MyService {
private final MyMapper myMapper;
@Autowired
public MyService(MyMapper myMapper) {
this.myMapper = myMapper;
}
public MyData getDataById(Long id) {
return myMapper.selectDataById(id);
}
public void saveData(MyData data) {
myMapper.insertData(data);
}
public List<MyData> getAllData() {
return myMapper.selectAllData();
}
}
mybatis-spring-boot-starter gradle
dependencies {
implementation("org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.2")
}
Quick Setup
- 자동으로 존재하는 DataSource 감지
- SqlSessionFactoryBean을 사용하여 해당 DataSource를 입력으로 사용하여 SqlSessionFactory의 인스턴스를 생성하고 등록
- 생성된 SqlSessionFactory를 사용하여 SqlSessionTemplate의 인스턴스를 생성하고 등록
- Mapper 인터페이스를 자동으로 스캔하고, 이를 SqlSessionTemplate와 연결하여 Spring 컨텍스트에 등록.
이렇게 등록된 매퍼 인터페이스는 빈으로 주입
DataSource 설정
@Configuration
@EnableTransactionManagement //트랜잭션 관리를 활성화
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.main") //yml 설정 값을 Java 객체에 매핑
public DataSource mainDataSource() {
return DataSourceBuilder.create().build();
}
}
MyBatis 설정
- mybatis Configuration 설정 참고
@Configuration
@MapperScan(basePackages = "com.exam.db", sqlSessionTemplateRef = "mainSqlSessionTemplate")
// Mapper 인터페이스를 검색하여 자동으로 Bean으로 등록해주는 역할
public class MyBatisConfig {
@Bean(name = "mainSqlSessionFactory")
public SqlSessionFactory mainSqlSessionFactory(
@Qualifier("mainDataSource") DataSource dataSource,
@Qualifier("mybatisConfigurationCustomizer") org.apache.ibatis.session.Configuration configuration) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:/mapper/*.xml")); // MyBatis Mapper XML 파일 경로
sessionFactoryBean.setConfiguration(configuration);
return sessionFactoryBean.getObject();
}
@Bean(name = "mainSqlSessionTemplate")
public SqlSessionTemplate mainSqlSessionTemplate(
@Qualifier("mainSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean(name = "mybatisConfigurationCustomizer")
public org.apache.ibatis.session.Configuration mybatisConfigurationCustomizer() {
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setMapUnderscoreToCamelCase(true);
configuration.setJdbcTypeForNull(JdbcType.NULL);
return configuration;
}
}
http://mybatis.org/spring/index.html
https://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
728x90
반응형
'Spring' 카테고리의 다른 글
[Spring Boot] MyBatis 단위 테스트 (0) | 2023.08.15 |
---|---|
[Spring Boot] Multi DataSource, MyBatis 설정하기 (0) | 2023.08.15 |
[Spring Boot] Tomcat URL parameter 특수문자 허용 설정 (0) | 2023.06.01 |
Spring ApplicationListener, EventListener (0) | 2022.01.11 |
Spring ApplicationContextInitializer (0) | 2022.01.11 |
반응형
300x250