MyBatis Integration

CRUD 操作和查询方法可以委托给 MyBatis。本节介绍如何配置 Spring Data JDBC 集成到 MyBatis 中,以及遵循哪些约定来移交查询的运行以及到库的映射。

Configuration

将 MyBatis 正确插入 Spring Data JDBC 的最简单方法是将 MyBatisJdbcConfiguration 导入您的应用程序配置:

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

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

如你所见,你只需要声明一个 SqlSessionFactoryBean,因为 MyBatisJdbcConfiguration 依靠最终在 ApplicationContext 中有 SqlSession bean 可用。

Usage conventions

对于 CrudRepository 中的每个操作,Spring Data JDBC 都会运行多条语句。如果应用程序上下文中存在 link:https://github.com/mybatis/mybatis-3/blob/master/src/main/java/org/apache/ibatis/session/SqlSessionFactory.java[SqlSessionFactory,则对于每个步骤,Spring Data 都会检查 SessionFactory 是否提供语句。如果找到一个,则将使用该语句(包括它已配置的到实体的映射)。

通过将实体类型的完全限定名称与 Mapper. 连接,以及一个确定语句类型的 String,来构造语句的名称。例如,如果要插入 org.example.User 的一个实例,Spring Data JDBC 会寻找名为 org.example.UserMapper.insert 的语句。

运行语句时,[MyBatisContext] 的实例将作为参数传递,这会让语句可以使用各个参数。

下表描述了可用的 MyBatis 语句:

Name Purpose 可能触发此语句的 CrudRepository 方法 MyBatisContext 中可获取的属性

insert

插入一个实体。这也适用于聚合根引用的实体。

save, saveAll.

getInstance:要保存的实例`getDomainType`:要保存的实体的类型`get(<key>):引用实体的 ID,其中 `<key>NamingStrategy 提供的后向引用列的名称。

update

更新一个实体。这也适用于聚合根引用的实体。

save, saveAll.

getInstance:要保存的实例`getDomainType`:要保存的实体的类型。

delete

Deletes a single entity.

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

Select all aggregate roots

findAll.

getDomainType:要加载的实体类型。

findAllById

按 ID 值选择一组聚合根。

findAllById.

getId:要加载的实体的 ID 值列表`getDomainType`:要加载的实体的类型。

findAllByProperty-<propertyName>

选择由另一实体引用的实体集。引用实体的类型用于前缀。引用实体类型用作后缀。This method is deprecated. Use findAllByPath instead

所有 find* 方法。如果未定义 findAllByPath 的查询。

getId:引用要加载的实体的实体的 ID。getDomainType:要加载的实体的类型。

findAllByPath-<propertyPath>

通过属性路径选择另一实体引用的实体集。

All find* methods.

getIdentifierIdentifier 存储聚合根的 ID 以及所有路径元素的键和列表索引。getDomainType:要加载的实体的类型。

findAllSorted

选择所有聚合根,并进行排序。

findAll(Sort).

getSort: The sorting specification.

findAllPaged

选择一页聚合根,可选择进行排序。

findAll(Page).

getPageable: The paging specification.

count

统计用作前缀的类型的聚合根数。

count

getDomainType:要统计的聚合根类型。