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 最終依賴於 SqlSession bean 在 ApplicationContext 中可用。

使用慣例

對於 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* 方法。

getIdentifierIdentifier,其中包含聚合根的 ID 以及所有路徑元素的鍵和列表索引。

getDomainType:要載入的實體類型。

findAllSorted

選取所有聚合根,已排序

findAll(Sort).

getSort:排序規範。

findAllPaged

選取聚合根頁面,可選排序

findAll(Page).

getPageable:分頁規範。

count

計算用作前綴的類型的聚合根數量

count

getDomainType:要計數的聚合根類型。