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: 要统计的聚合根类型。