SpringBootでMyBatisを利用する方法
SpringBootがORMとして、EclipseLinkなどのJPAのフレームワークを使う場合は、
設定が簡単なんですが、MyBatisを利用したい場合に関しては、少し実装してあげる必要があります。
以前のエントリーの方法で、プロジェクトを作成した前提で書きます。chronosdeveloper.hatenablog.com
POMファイルに必要なものを追記します。
Springのトランザクション関連のライブラリとMyBatis関連のライブラリを追加します。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${org.springframework.version}</version><!--$NO-MVN-MAN-VER$--> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${org.springframework.version}</version><!--$NO-MVN-MAN-VER$--> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis-spring.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${org.mybatis.version}</version> </dependency>
それが終わったら、通常通りにSpringBootのアプリケーション設定クラスを作成します。
@EnableAutoConfiguration @ComponentScan public class ApplicationConfiguration { }
次にsrc/main/resourcesにapplication.ymlを作成して、データーソースの設定を書きます。
SpringBootが自動的にこのファイルからデーターソースを生成してくれます。
spring: datasource: username=user password=pass url=jdbc:oracle:thin:@localhost:1521:xe driverClassName=oracle.jdbc.driver.OracleDriver
次にMyBatisの設定用のクラスを作成します。
このクラスにBeanの定義として、SqlSessionFactoryを生成する処理を記述します。
また、MyBatisのMapperScanはAOPの@MapperScanを使います。
@Configuration @MapperScan(basePackages="persistence.dao") public class ApplicationDataSourceConfiguration { @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setConfigLocation(new ClassPathResource("/mapper-config.xml")); sessionFactory.setFailFast(true); return sessionFactory.getObject(); } }
これで準備は完了です。
ちなみに、データーソースの部分に関してですが、
通常は、application.ymlに定義しておけば、自動的に生成してくれますが、
パスワードの暗号化や管理等で、なんらかのライブラリを挟む必要がある場合は、
普通にMyBatisの設定用のクラス内にデーターソースの生成処理を記述することも可能です。
@Configuration @MapperScan(basePackages="persistence.dao") public class ApplicationDataSourceConfiguration { @Bean public DataSource dataSource() throws SQLException { oracle.jdbc.pool.OracleDataSource dataSource = new oracle.jdbc.pool.OracleDataSource(); dataSource.setUser("datasource.username"); dataSource.setPassword("datasource.password"); dataSource.setURL("datasource.url"); return dataSource; } @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setConfigLocation(new ClassPathResource("/mapper-config.xml")); sessionFactory.setFailFast(true); return sessionFactory.getObject(); } }