此版本仍在开发中,尚未被视为稳定版本。如需使用最新的稳定版本,请使用 Spring Data Relational 4.0.4spring-doc.cadn.net.cn

MyBatis 集成

CRUD 操作和查询方法可以委托给 MyBatis。 本节介绍如何配置 Spring Data JDBC 以与 MyBatis 集成,以及应遵循哪些约定,将查询的执行和结果映射交由该库处理。spring-doc.cadn.net.cn

配置

将 MyBatis 正确集成到 Spring Data JDBC 中的最简单方法是将 MyBatisJdbcConfiguration 导入到您的应用程序配置中:spring-doc.cadn.net.cn

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

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

如你所见,你只需声明一个 SqlSessionFactoryBean 即可,因为 MyBatisJdbcConfiguration 最终依赖于在 SqlSession 中可用的 ApplicationContext bean。spring-doc.cadn.net.cn

使用约定

对于 CrudRepository 中的每个操作,Spring Data JDBC 会运行多个语句。 如果应用上下文中存在 SqlSessionFactory,Spring Data 会在每一步检查 SessionFactory 是否提供相应的语句。 如果找到该语句,则将使用该语句(包括其配置好的到实体的映射)。spring-doc.cadn.net.cn

语句的名称是通过将实体类型的全限定名与Mapper.以及一个用于确定语句类型的String拼接而成。 例如,如果要插入一个org.example.User的实例,Spring Data JDBC 会查找名为org.example.UserMapper.insert的语句。spring-doc.cadn.net.cn

当该语句执行时,会传入一个 [MyBatisContext] 的实例作为参数,从而使各种参数对语句可用。spring-doc.cadn.net.cn

下表描述了可用的 MyBatis 语句:spring-doc.cadn.net.cn

姓名 目的 可能触发此语句的 CrudRepository 方法 MyBatisContext 中可用的属性

insertspring-doc.cadn.net.cn

插入单个实体。这也适用于由聚合根引用的实体。spring-doc.cadn.net.cn

save, saveAll.spring-doc.cadn.net.cn

getInstance:要保存的实例。spring-doc.cadn.net.cn

getDomainType:要保存的实体类型。spring-doc.cadn.net.cn

get(<key>):引用实体的 ID,其中 <key> 是由 NamingStrategy 提供的反向引用列的名称。spring-doc.cadn.net.cn

updatespring-doc.cadn.net.cn

更新单个实体。这也适用于由聚合根引用的实体。spring-doc.cadn.net.cn

save, saveAll.spring-doc.cadn.net.cn

getInstance:要保存的实例。spring-doc.cadn.net.cn

getDomainType:要保存的实体类型。spring-doc.cadn.net.cn

deletespring-doc.cadn.net.cn

删除单个实体。spring-doc.cadn.net.cn

delete, deleteById.spring-doc.cadn.net.cn

getId:要删除的实例的 ID。spring-doc.cadn.net.cn

getDomainType:要删除的实体的类型。spring-doc.cadn.net.cn

deleteAll-<propertyPath>spring-doc.cadn.net.cn

删除由指定属性路径所引用的、以该类型作为前缀的所有实体。 请注意,用于为语句名称添加前缀的类型是聚合根的名称,而不是要删除的实体的类型。spring-doc.cadn.net.cn

deleteAll.spring-doc.cadn.net.cn

getDomainType:要删除的实体的类型。spring-doc.cadn.net.cn

deleteAllspring-doc.cadn.net.cn

删除用作前缀类型的全部聚合根spring-doc.cadn.net.cn

deleteAll.spring-doc.cadn.net.cn

getDomainType:要删除的实体的类型。spring-doc.cadn.net.cn

delete-<propertyPath>spring-doc.cadn.net.cn

删除由给定 propertyPath 所引用的聚合根中的所有实体spring-doc.cadn.net.cn

deleteById.spring-doc.cadn.net.cn

getId:要删除其引用实体的聚合根的 ID。spring-doc.cadn.net.cn

getDomainType:要删除的实体的类型。spring-doc.cadn.net.cn

findByIdspring-doc.cadn.net.cn

根据ID选择一个聚合根spring-doc.cadn.net.cn

findById.spring-doc.cadn.net.cn

getId:要加载的实体的 ID。spring-doc.cadn.net.cn

getDomainType:要加载的实体类型。spring-doc.cadn.net.cn

findAllspring-doc.cadn.net.cn

选择所有聚合根spring-doc.cadn.net.cn

findAll.spring-doc.cadn.net.cn

getDomainType:要加载的实体类型。spring-doc.cadn.net.cn

findAllByIdspring-doc.cadn.net.cn

根据ID值选择一组聚合根spring-doc.cadn.net.cn

findAllById.spring-doc.cadn.net.cn

getId:要加载的实体的 ID 值列表。spring-doc.cadn.net.cn

getDomainType:要加载的实体类型。spring-doc.cadn.net.cn

findAllByProperty-<propertyName>spring-doc.cadn.net.cn

选择一组被其他实体引用的实体。引用实体的类型用作前缀,被引用实体的类型用作后缀。此方法已弃用,请使用 findAllByPath 替代spring-doc.cadn.net.cn

所有 find* 方法。如果未为 findAllByPath 定义查询spring-doc.cadn.net.cn

getId:引用待加载实体的实体 ID。spring-doc.cadn.net.cn

getDomainType:要加载的实体类型。spring-doc.cadn.net.cn

findAllByPath-<propertyPath>spring-doc.cadn.net.cn

通过属性路径选择被另一个实体引用的一组实体。spring-doc.cadn.net.cn

所有 find* 方法。spring-doc.cadn.net.cn

getIdentifier:包含聚合根 ID 以及所有路径元素的键和列表索引的 Identifierspring-doc.cadn.net.cn

getDomainType:要加载的实体类型。spring-doc.cadn.net.cn

findAllSortedspring-doc.cadn.net.cn

选择所有聚合根,按排序方式spring-doc.cadn.net.cn

findAll(Sort).spring-doc.cadn.net.cn

getSort:排序规范。spring-doc.cadn.net.cn

findAllPagedspring-doc.cadn.net.cn

选择一个聚合根页面,可选择是否排序spring-doc.cadn.net.cn

findAll(Page).spring-doc.cadn.net.cn

getPageable:分页规范。spring-doc.cadn.net.cn

countspring-doc.cadn.net.cn

计算用作前缀的聚合根类型的数量spring-doc.cadn.net.cn

countspring-doc.cadn.net.cn

getDomainType:要统计的聚合根的类型。spring-doc.cadn.net.cn