LoginSignup
6
4

More than 3 years have passed since last update.

Spring Boot2 x Doma2のハマったこと備忘録

Posted at

このページについて

Spring Boot2 x Doma2で開発するにあたって少しだけハマったことがいくつかあったので備忘録として残しておこうと思います。

当方のスペック

Spring Boot 2.1.7
Java11
IntelliJ 2018.3
DOMA doma-spring-boot-starter:1.1.1
MySQL 5.7
gradle 5.4.1

[DOMA4019] SQLファイルが クラスパスから見つかりませんでした

以下のようにSQLをファイルを正しいディレクトリ構成でおいてもこのエラーが出る場合があります。

例) -- SQLファイルの置く場所は間違っていない
UserRepostory findOneメソッド
src/main/xxx/domain/repository/UserResotiory.java
src/main/resources/META-INF/xxx/domain/repository/UserResotiory/findOne.sql

解決策)

build.gradleに以下を追加

processResources.destinationDir = compileJava.destinationDir
compileJava.dependsOn processResources

参考: https://github.com/domaframework/simple-boilerplate/blob/master/build.gradle

ビルド時にRepository(Dao)インターフェースの実装がないと怒られる

以下みたいなエラー
required a bean of type xxxxxRepository that could not be found.
Consider defining a bean of type xxxxxx

解決策)

1.IntellJで以下の設定をしていることが前提(Lombok入れていればやっているはず)
Preference > Build,Execution,Deployment > Annotation Processorsで
Enable annotation processing をON

2.Repository(Dao)インターフェースに ConfigAutowireableアノテーションをつける

DomaConfigの作り方

未知のカラムがあってもスルーしてほしい場合、DomaのConfigクラスを作りUnknownColumnHandlerをオーバーライドする必要がある。(他にもConfigが必要なケースはあるはず)
公式ドキュメントだとSingletonConfig を使うやり方が一番上にあるがSpring Bootの場合はフレームワークに合わせたAdvanceな方法が必要。

解決例)

DomaConfig.java
@Configuration
public class DomaConfig implements Config {


    @Autowired
    private DomaAutoConfiguration domaAutoConfiguration;

    @Autowired
    private DataSource dataSource;

    @Override
    public DataSource getDataSource() {
        return dataSource;
    }

    @Override
    public UnknownColumnHandler getUnknownColumnHandler() {
        return new UnknownColumnHandler() {
            @Override
            public void handle(Query query, EntityType<?> entityType, String unknownColumnName) {
                // オーバーライドして潰している
            }
        };
    }

    @Override
    public Dialect getDialect() {
        return domaAutoConfiguration.dialect();
    }

    @Bean
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource primaryDataSource(DataSourceProperties properties) {
        return properties.initializeDataSourceBuilder().build();
    }
}

備考

Spring Boot2のORMだとMyBatisが一般的ではあると思いますが以下の理由からDoma2を使ってみました。

  1. JavaとSQLを分離したい
  2. XMLを書かないで済む
6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4