Spring Data JDBC教程(领域驱动设计)


xinwang_m@163.com
2020-07-20 05:27:06 (4年前)
Spring Data JDBC教程

Spring Data JDBC是Spring Data系列的一部分,可以轻松实现基于JDBC的存储库。该模块处理对基于JDBC的数据访问层的增强支持。它使构建使用数据访问技术的Spring驱动程序更容易。

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
}
}

0 条回复
  1. 动动手指,沙发就是你的了!
登录 后才能参与评论