Spring Data JDBC教程 Spring Data JDBC是Spring Data系列的一部分,可以轻松实现基于JDBC的存储库。该模块处理对基于JDBC的数据访问层的增强支持。它使构建使用数据访问技术的Spring驱动程序更容易。
Spring Data JDBC背后的想法是提供对关系数据库的访问,而无需处理JPA的复杂性。JPA提供延迟加载,缓存和脏跟踪等功能。果你需要这些功能会很很棒,但会让猜测JPA的行为比非JPA更难。
不是ORM Spring Data JDBC不会尝试成为ORM。它不是JPA的竞争对手。相反,它更像是个人ORM的构建工具包,您可以定义自己喜欢或需要的方式。
聚合根 Spring Data存储库的灵感来自于Eric Evans的Domain Driven Design领域驱动设计一书中描述的存储库Repository。这样做的一个结果是每个聚合根应该有一个存储库。Aggregate Root聚合根是同一本书中的另一个概念,描述了一个实体,它控制其他实体的生命周期,这些实体一起是聚合。Aggregate是模型的一个子集,它在对Aggregate Root的方法调用之间保持一致。
Spring Data JDBC尽力鼓励您根据这些想法对领域进行建模。
聚合是一组实体,它们保证在原子更改之间保持一致。一个典型的例子是一个Order用OrderItems。在进行更改时Order,属性(例如,numberOfItems与实际数量OrderItems一致)保持一致。
每个聚合只有一个聚合根,它是聚合的一个实体。聚合只能通过该聚合根上的方法进行操作。这些是前面提到的原子变化一致性。
Spring Data JDBC假定只有聚合具有存储聚合的非根实体的表的外键,而没有其他实体指向非根实体。
特征 具有可自定义的简单聚合的CRUD操作NamingStrategy。
支持@Query 注释。
支持MyBatis查询。
事件 审计
基于JavaConfig的存储库配置介绍@EnableJdbcRepositories 。
配置 pom.xml导入spring-boot-starter-data-jdbc:
org.springframework.boot spring-boot-starter-data-jdbc 数据库可以使用Hsqldb:
org.hsqldb hsqldb runtime
存储库 Spring Data存储库抽象中的中央接口是Repository。它将领域类以及ID作为类型参数进行管理。此接口主要用作标记接口,用于捕获要使用的类型,并帮助发现扩展此接口的接口。 public interface ProductRepository extends Repository { }
保存聚合根实体:
可以使用该ProductRepository.save(…)方法执行保存聚合。如果聚合是新的,则会导致聚合根的插入,然后是所有直接或间接引用的实体的插入语句。
如果聚合根不是新的,则删除所有引用的实体,更新聚合根,并再次插入所有引用的实体。请注意,实例是否为new是实例状态的一部分。
源码:Github
从聚合根发布事件 由存储库管理的实体是聚合根。在领域驱动设计应用程序中,这些聚合根通常会发布领域事件。Spring Data提供了一个注释@DomainEvents ,可以在聚合根的方法上使用,以使该发布尽可能简单,如以下示例所示:
class AnAggregateRoot {
@DomainEvents Collection domainEvents() { // … return events you want to get published here }
@AfterDomainEventPublication void callbackMethod() { // … potentially clean up domain events list } },Spring Data JDBC教程 Spring Data JDBC是Spring Data系列的一部分,可以轻松实现基于JDBC的存储库。该模块处理对基于JDBC的数据访问层的增强支持。它使构建使用数据访问技术的Spring驱动程序更容易。
Spring Data JDBC背后的想法是提供对关系数据库的访问,而无需处理JPA的复杂性。JPA提供延迟加载,缓存和脏跟踪等功能。果你需要这些功能会很很棒,但会让猜测JPA的行为比非JPA更难。
不是ORM Spring Data JDBC不会尝试成为ORM。它不是JPA的竞争对手。相反,它更像是个人ORM的构建工具包,您可以定义自己喜欢或需要的方式。
聚合根 Spring Data存储库的灵感来自于Eric Evans的Domain Driven Design领域驱动设计一书中描述的存储库Repository。这样做的一个结果是每个聚合根应该有一个存储库。Aggregate Root聚合根是同一本书中的另一个概念,描述了一个实体,它控制其他实体的生命周期,这些实体一起是聚合。Aggregate是模型的一个子集,它在对Aggregate Root的方法调用之间保持一致。
Spring Data JDBC尽力鼓励您根据这些想法对领域进行建模。
聚合是一组实体,它们保证在原子更改之间保持一致。一个典型的例子是一个Order用OrderItems。在进行更改时Order,属性(例如,numberOfItems与实际数量OrderItems一致)保持一致。
每个聚合只有一个聚合根,它是聚合的一个实体。聚合只能通过该聚合根上的方法进行操作。这些是前面提到的原子变化一致性。
Spring Data JDBC假定只有聚合具有存储聚合的非根实体的表的外键,而没有其他实体指向非根实体。
特征 具有可自定义的简单聚合的CRUD操作NamingStrategy。
支持@Query 注释。
支持MyBatis查询。
事件 审计
基于JavaConfig的存储库配置介绍@EnableJdbcRepositories 。
配置 pom.xml导入spring-boot-starter-data-jdbc:
org.springframework.boot spring-boot-starter-data-jdbc 数据库可以使用Hsqldb: org.hsqldb hsqldb runtime
存储库 Spring Data存储库抽象中的中央接口是Repository。它将领域类以及ID作为类型参数进行管理。此接口主要用作标记接口,用于捕获要使用的类型,并帮助发现扩展此接口的接口。 public interface ProductRepository extends Repository { }
保存聚合根实体:
可以使用该ProductRepository.save(…)方法执行保存聚合。如果聚合是新的,则会导致聚合根的插入,然后是所有直接或间接引用的实体的插入语句。
如果聚合根不是新的,则删除所有引用的实体,更新聚合根,并再次插入所有引用的实体。请注意,实例是否为new是实例状态的一部分。
源码:Github
从聚合根发布事件 由存储库管理的实体是聚合根。在领域驱动设计应用程序中,这些聚合根通常会发布领域事件。Spring Data提供了一个注释@DomainEvents ,可以在聚合根的方法上使用,以使该发布尽可能简单,如以下示例所示:
class AnAggregateRoot {
@DomainEvents Collection domainEvents() { // … return events you want to get published here }
@AfterDomainEventPublication void callbackMethod() { // … potentially clean up domain events list } }