SpringBootとDomaの連携をGitHubにあるサンプルを参考に作ってみました。
ビルドはGradleを使っています。
ディレクトリ構成
SpringBoot標準の構成を使用します。
作成・編集するファイル
build.gradle
DBライブラリの依存関係を追加します。
JDBCドライバーはローカルまたはMavenリポジトリから取得し、ビルド後のjarファイルに含めるようにします。
dependencies { // SpringBoot + Thymeleaf等必要に応じて compile("org.springframework.boot:spring-boot-starter-aop") compile("org.springframework.boot:spring-boot-starter-web") compile("org.springframework.boot:spring-boot-starter-thymeleaf") compile("org.hibernate:hibernate-validator") compile files("C:/app/lib/lombok/lombok-1.4.4.jar") // 以下DB関連の依存ライブラリ// SpringJdbc compile("org.springframework:spring-jdbc") // Doma最新版 compile("org.seasar.doma:doma:1.+") // ローカルのOracleDriver compile files("C:/app/lib/jdbc/ojdbc7.jar") }
application.properties
SpringBootのアプリケーション設定ファイルにデータベースの設定情報を記述します。
# Oracleの場合 spring.datasource.url=jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:sid spring.datasource.username=username spring.datasource.password=password spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
ConfigAutowireable.java
DaoクラスをSpringのDIコンテナで管理するためのアノテーションを作成します。
package demo; import org.seasar.doma.AnnotateWith; import org.seasar.doma.Annotation; import org.seasar.doma.AnnotationTarget; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @AnnotateWith(annotations = { @Annotation(target = AnnotationTarget.CLASS, type = Component.class), @Annotation(target = AnnotationTarget.CONSTRUCTOR, type = Autowired.class) }) public@interface ConfigAutowireable { }
DataSourceConfiguration.java
SpringとDomaを連携するためのデータベース設定クラスを作成します。
package demo; import javax.annotation.Resource; import javax.sql.DataSource; import org.seasar.doma.jdbc.Config; import org.seasar.doma.jdbc.DomaAbstractConfig; import org.seasar.doma.jdbc.NoCacheSqlFileRepository; import org.seasar.doma.jdbc.SqlFileRepository; import org.seasar.doma.jdbc.dialect.Dialect; import org.seasar.doma.jdbc.dialect.OracleDialect; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration@EnableTransactionManagementpublicclass DataSourceConfiguration { @Resourceprivate Environment env; @Beanpublic DataSource dataSource() { // application.propertiesにあるDB設定キーから値を取得し設定します。 DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(env.getRequiredProperty("spring.datasource.driverClassName")); dataSource.setUrl(env.getRequiredProperty("spring.datasource.url")); dataSource.setUsername(env.getRequiredProperty("spring.datasource.username")); dataSource.setPassword(env.getRequiredProperty("spring.datasource.password")); // TransactionAwareDataSourceProxyでラッピングしないとDoma側でコネクションがおかしくなるreturnnew TransactionAwareDataSourceProxy(dataSource); } @Beanpublic PlatformTransactionManager transactionManager() { returnnew DataSourceTransactionManager(dataSource()); } @Beanpublic Dialect dialect() { // DBの方言はここで設定します。returnnew OracleDialect(); } @Beanpublic SqlFileRepository sqlFileRepository() { returnnew NoCacheSqlFileRepository(); } @Beanpublic Config config() { // Domaの設定を行います。デフォルトはDomaAbstractConfigを使用します。returnnew DomaAbstractConfig() { @Overridepublic Dialect getDialect() { return dialect(); } @Overridepublic DataSource getDataSource() { return dataSource(); } @Overridepublic SqlFileRepository getSqlFileRepository() { return sqlFileRepository(); } }; } }