Spring Boot 3의 MyBatis 자동 구성 원리
기준: Spring Boot 3.x, MyBatis Spring Boot Starter 3.x, MyBatis 3.5.x, Java 17+. Boot 2의 javax 의존성을 Boot 3의 jakarta 의존성과 혼합해서 사용할 수 없습니다.
1. Starter의 역할
TEXT
DataSource -> SqlSessionFactory -> SqlSessionTemplate -> Mapper 代理
자동 구성은 classpath, 기존 Bean 및 속성을 바탕으로 객체 생성 여부를 결정합니다. 현재 진입점은 의존성 패키지의 AutoConfiguration.imports, 구성 메타데이터 및 조건 평가 보고서를 기준으로 판단하며, 기존 spring.factories에 의존하지 마세요.
2. 최소 구성
YAML
mybatis:
mapper-locations: classpath:/mapper/**/*.xml
type-aliases-package: com.example.order.domain
configuration:
map-underscore-to-camel-case: true
default-statement-timeout: 5
JAVA
@Mapper
public interface OrderMapper {
Order findById(long id);
}
3. Bean 생성 흐름
Boot이 DataSource를 만들고, MyBatis가 SqlSessionFactory를 생성합니다. XML, TypeHandler 및 플러그인을 읽고, SqlSessionTemplate을 만든 다음, Mapper 스캐너가 MapperFactoryBean을 등록하고, 마지막으로 Mapper 프록시가 반환됩니다.
@Transactional은 서비스 계층에 두어야 합니다. 다중 데이터 소스를 사용하려면 각 SqlSessionFactory, Mapper 스캔 범위 및 트랜잭션 관리자를 명시적으로 구성해야 합니다. #{} 파라미터 바인딩을 사용하세요. ${}는 문자열 연결이므로 화이트리스트에 지정된 필드만 허용합니다.