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を作成する。マッパースキャナーがMapperFactoryBeanを登録し、最後にMapperのプロキシを返す。
@Transactionalはサービス層に置く。複数データソースを使う場合は、各SqlSessionFactory、マッパースキャンの対象範囲、トランザクションマネージャーを明示的に設定する。パラメータのバインドには#{}を使う。${}は文字列連結であり、使用できるフィールドはホワイトリストに限定する。