我想了解为什么 spring-data-jdbc 提供与 MyBatis 的集成。
- 它在解决什么问题?
- spring-data-jdbc 如何补充 MyBatis。
- 这只是使映射器符合存储库的问题还是超出了这个范围。
- 当我只能使用 Mappers 时,为什么我要结合使用 MyBatis 和 spring-data-jdbc。
我想了解为什么 spring-data-jdbc 提供与 MyBatis 的集成。
简而言之,为提供 JDBC API 的商店spring-data-jdbc
提供了域驱动设计存储库实现。它试图在概念上非常简单(特别是如果你将它与 JPA 进行比较)。并且在某种意义上类似于 mybatis,它不尝试引入隐藏 ORM 复杂性的抽象。
这是文档中的引用spring-data-jdbc
:
- 如果您加载一个实体,SQL 语句就会被执行。完成此操作后,您将拥有一个完全加载的实体。没有延迟加载或缓存。
- 如果你保存一个实体,它就会被保存。如果你不这样做,它就不会。没有脏跟踪,也没有会话。
- 有一个如何将实体映射到表的简单模型。它可能只适用于相当简单的情况。如果您不喜欢这样,您应该编写自己的策略。Spring Data JDBC 仅对使用注释自定义策略提供非常有限的支持。
spring-data-jdbc
不用mybatis也可以使用。查询要么是自己实现的 CRUD 查询,要么是使用注释spring-data-jdbc
指定的自定义查询。@Query
它确实提供了与 mybatis 的集成,这允许使用第三种方式来指定查询,即使用带有 mybatis 中所有可用功能的 mybatis 映射器。这允许创建更复杂的映射,同时仍然使用基于存储库方法名称的自动查询生成来进行简单查询。
有时,即使是简单的 CRUD 操作也需要创建 SQL 查询,这在 mybatis 中被视为限制或问题。spring-data-jdbc
允许通过向应用程序引入额外的抽象层(存储库)来解决这个问题。我说additional
是因为可以使用 mybatis mapper 作为 DDD 仓库。
事实上,如果应用程序有很多 CRUD 操作,将会引入和使用很多非常相似的代码或一些解决方案来制作类似于https://github.com/rickcr/mybatis-generic-crud的通用 CRUD。
spring-data-jdbc
允许以相当低的价格相当优雅地解决这个问题。