spring-data-jdbc 是如何赞美 MyBatis 的?

Ale*_*rov 6 java mybatis spring-data spring-mybatis spring-data-jdbc

我想了解为什么 spring-data-jdbc 提供与 MyBatis 的集成。

  • 它在解决什么问题?
  • spring-data-jdbc 是如何赞美 MyBatis 的。
  • 这只是一个使映射器符合存储库的问题,还是超出了这个问题。
  • 当我可以使用 Mappers 时,为什么要结合使用 MyBatis 和 spring-data-jdbc。

Rom*_*val 8

简而言之,它为提供 JDBC API 的商店spring-data-jdbc提供了域驱动设计存储库实现。它试图在概念上非常简单(尤其是将它与 JPA 进行比较时)。并且在某种意义上与 mybatis 类似,它不会尝试引入隐藏 ORM 复杂性的抽象。

这是spring-data-jdbc文档中的引用:

  • 如果加载实体,则会执行 SQL 语句。完成此操作后,您将拥有一个完全加载的实体。没有进行延迟加载或缓存。
  • 如果您保存一个实体,它将被保存。如果您不这样做,则不会。没有脏跟踪,也没有会话。
  • 有一个关于如何将实体映射到表的简单模型。它可能只适用于相当简单的情况。如果您不喜欢那样,您应该编写自己的策略。Spring Data JDBC 仅对使用注释自定义策略提供非常有限的支持。

spring-data-jdbc不用mybatis也能用。查询要么是spring-data-jdbc自己实现的 CRUD 查询,要么是使用@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 允许以相当低的价格相当优雅地解决这个问题。