跳到主要内容

MyBatis 集成

Doubao 中英对照 MyBatis Integration

CRUD 操作和查询方法可以委托给 MyBatis。本节介绍如何配置 Spring Data JDBC 以与 MyBatis 集成,以及应遵循哪些约定,以便将查询的执行以及映射都交给该库。

配置​

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

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

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

如您所见,您只需声明一个 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统计用作前缀的类型的聚合根数量countgetDomainType:要统计的聚合根的类型。