MyBatis 整合

CRUD 操作和查詢方法可以委託給 MyBatis。本節介紹如何配置 Spring Data JDBC 以整合 MyBatis,以及應遵循哪些約定來將查詢執行和對映移交給該庫。

配置

將 MyBatis 正確整合到 Spring Data JDBC 的最簡單方法是將 MyBatisJdbcConfiguration 匯入到您的應用程式配置中

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

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

如您所見,您只需宣告一個 SqlSessionFactoryBean,因為 MyBatisJdbcConfiguration 最終依賴於 ApplicationContext 中可用的 SqlSession bean。

使用約定

對於 CrudRepository 中的每個操作,Spring Data JDBC 會執行多個語句。如果在應用程式上下文中存在一個 SqlSessionFactory,Spring Data 會在每個步驟中檢查 SessionFactory 是否提供了相應的語句。如果找到,則使用該語句(包括其配置的實體對映)。

語句的名稱是透過將實體型別的完全限定名與 Mapper. 和一個確定語句型別的 String 連線起來構成的。例如,如果要插入 org.example.User 的例項,Spring Data JDBC 會查詢名為 org.example.UserMapper.insert 的語句。

執行語句時,[MyBatisContext] 的一個例項會作為引數傳遞,它使各種引數可供語句使用。

下表描述了可用的 MyBatis 語句

名稱 目的 可能觸發此語句的 CrudRepository 方法 MyBatisContext 中可用的屬性

insert

插入單個實體。這也適用於聚合根引用的實體。

save, saveAll

getInstance: 要儲存的例項

getDomainType: 要儲存的實體型別。

get(<key>): 引用實體的 ID,其中 <key>NamingStrategy 提供的反向引用列的名稱。

update

更新單個實體。這也適用於聚合根引用的實體。

save, saveAll

getInstance: 要儲存的例項

getDomainType: 要儲存的實體型別。

delete

刪除單個實體。

delete, deleteById

getId: 要刪除例項的 ID

getDomainType: 要刪除的實體型別。

deleteAll-<propertyPath>

刪除由給定屬性路徑作為字首的任何聚合根型別引用的所有實體。請注意,用於語句名字首的型別是聚合根的名稱,而不是要刪除的實體的名稱。

deleteAll.

getDomainType: 要刪除的實體型別。

deleteAll

刪除以該型別作為字首的所有聚合根

deleteAll.

getDomainType: 要刪除的實體型別。

delete-<propertyPath>

刪除由具有給定 propertyPath 的聚合根引用的所有實體

deleteById.

getId: 要刪除其引用實體的聚合根的 ID。

getDomainType: 要刪除的實體型別。

findById

按 ID 選擇聚合根

findById.

getId: 要載入實體的 ID。

getDomainType: 要載入的實體型別。

findAll

選擇所有聚合根

findAll.

getDomainType: 要載入的實體型別。

findAllById

按 ID 值選擇一組聚合根

findAllById.

getId: 要載入實體的 ID 值列表。

getDomainType: 要載入的實體型別。

findAllByProperty-<propertyName>

選擇由另一個實體引用的一組實體。引用實體的型別用作字首。被引用實體的型別用作字尾。此方法已棄用。請改用 findAllByPath

所有 find* 方法。如果未定義 findAllByPath 的查詢

getId: 引用要載入實體的實體的 ID。

getDomainType: 要載入的實體型別。

findAllByPath-<propertyPath>

透過屬性路徑選擇由另一個實體引用的一組實體。

所有 find* 方法。

getIdentifier: 包含聚合根 ID 以及所有路徑元素的鍵和列表索引的 Identifier

getDomainType: 要載入的實體型別。

findAllSorted

選擇所有聚合根,並排序

findAll(Sort).

getSort: 排序規範。

findAllPaged

選擇一頁聚合根,可選排序

findAll(Page).

getPageable: 分頁規範。

count

統計以該型別作為字首的聚合根數量

count

getDomainType: 要統計的聚合根型別。