MyBatis 統合

CRUD 操作とクエリメソッドは MyBatis に委譲できます。このセクションでは、MyBatis と統合するように Spring Data JDBC を構成する方法、およびクエリの実行とライブラリへのマッピングを引き継ぐために従うべき規則について説明します。

構成

MyBatis を Spring Data JDBC に適切にプラグインする最も簡単な方法は、MyBatisJdbcConfiguration をアプリケーション構成にインポートすることです。

@Configuration
@EnableJdbcRepositories
@Import(MyBatisJdbcConfiguration.class)
class Application {

  @Bean
  SqlSessionFactoryBean sqlSessionFactoryBean() {
    // Configure MyBatis here
  }
}

ご覧のとおり、MyBatisJdbcConfiguration は ApplicationContext で最終的に利用可能になるために SqlSession Bean に依存しているため、宣言する必要があるのは SqlSessionFactoryBean だけです。

使用規則

CrudRepository の各操作に対して、Spring Data JDBC は複数のステートメントを実行します。アプリケーションコンテキストに SqlSessionFactory [GitHub] (英語) がある場合、Spring Data は、各ステップで、SessionFactory がステートメントを提供するかどうかをチェックします。見つかった場合は、そのステートメント(構成されたエンティティへのマッピングを含む)が使用されます。

ステートメントの名前は、エンティティ型の完全修飾名と Mapper. およびステートメントの種類を決定する String を連結することにより構築されます。例: org.example.User のインスタンスが挿入される場合、Spring Data JDBC は org.example.UserMapper.insert という名前のステートメントを探します。

ステートメントが実行されると、[MyBatisContext] のインスタンスが引数として渡され、さまざまな引数がステートメントで使用可能になります。

次の表は、使用可能な MyBatis ステートメントについて説明しています。

名前 目的 このステートメントをトリガーする可能性のある CrudRepository メソッド MyBatisContext で利用可能な属性

insert

単一のエンティティを挿入します。これは、集約ルートによって参照されるエンティティにも適用されます。

save, saveAll.

getInstance: the instance to be saved

getDomainType: The type of the entity to be saved.

get(<key>): ID of the referencing entity, where <key> is the name of the back reference column provided by the NamingStrategy.

update

単一のエンティティを更新します。これは、集約ルートによって参照されるエンティティにも適用されます。

save, saveAll.

getInstance: The instance to be saved

getDomainType: The type of the entity to be saved.

delete

単一のエンティティを削除します。

delete, deleteById.

getId: The ID of the instance to be deleted

getDomainType: The type of the entity to be deleted.

deleteAll-<propertyPath>

指定されたプロパティパスのプレフィックスとして使用される型の集約ルートによって参照されるすべてのエンティティを削除します。ステートメント名のプレフィックスに使用される型は、削除されるエンティティの名前ではなく、集約ルートの名前であることに注意してください。

deleteAll.

getDomainType: The types of the entities to be deleted.

deleteAll

プレフィックスとして使用される型のすべての集約ルートを削除します

deleteAll.

getDomainType: The type of the entities to be deleted.

delete-<propertyPath>

指定された propertyPath を持つ集約ルートによって参照されるすべてのエンティティを削除します

deleteById.

getId: The ID of the aggregate root for which referenced entities are to be deleted.

getDomainType: The type of the entities to be deleted.

findById

ID で集約ルートを選択します

findById.

getId: The ID of the entity to load.

getDomainType: The type of the entity to load.

findAll

すべての集約ルートを選択します

findAll.

getDomainType: The type of the entity to load.

findAllById

ID 値によって集約ルートのセットを選択します

findAllById.

getId: A list of ID values of the entities to load.

getDomainType: The type of the entity to load.

findAllByProperty-<propertyName>

別のエンティティによって参照されるエンティティのセットを選択します。参照エンティティの型がプレフィックスに使用されます。参照されるエンティティ型は、接尾辞として使用されます。このメソッドは非推奨です。代わりに findAllByPath を使用してください

すべての find* メソッド。findAllByPath にクエリが定義されていない場合

getId: The ID of the entity referencing the entities to be loaded.

getDomainType: The type of the entity to load.

findAllByPath-<propertyPath>

プロパティパスを介して別のエンティティによって参照されるエンティティのセットを選択します。

すべての find* メソッド。

getIdentifier: The Identifier holding the id of the aggregate root plus the keys and list indexes of all path elements.

getDomainType: The type of the entity to load.

findAllSorted

ソートされたすべての集約ルートを選択します

findAll(Sort).

getSort: The sorting specification.

findAllPaged

オプションでソートされた集約ルートのページを選択します

findAll(Page).

getPageable: The paging specification.

count

プレフィックスとして使用される型の集約ルートの数を数えます

count

getDomainType: カウントする集約ルートの型。