首页 > 解决方案 > spring-data-jdbc 是如何补充 MyBatis 的?

问题描述

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

标签: javaspring-datamybatisspring-mybatisspring-data-jdbc

解决方案


简而言之,为提供 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允许以相当低的价格相当优雅地解决这个问题。


推荐阅读