Spring认证中国教育管理中心-Spring Data Neo4j教程二

本文详细介绍了Spring Data Neo4j (SDN) 中的对象映射,特别是基于元数据的映射,包括@Node、@Id、@GeneratedValue等注解的使用。文章解释了如何使用这些注解来映射节点、关系和属性,强调了注解在提高性能和维护元数据模型中的作用。此外,还讨论了乐观锁定、动态标签、关系属性等概念。
摘要由CSDN通过智能技术生成

原标题:Spring认证中国教育管理中心-Spring Data Neo4j教程二(Spring中国教育管理中心)

Spring认证-Spring Data Neo4j教程二

6. 对象映射

以下部分将解释图表和域之间的映射过程。它分为两部分。第一部分解释了实际映射和可用工具,用于描述如何将节点、关系和属性映射到对象。第二部分将介绍 Spring Data 的对象映射基础知识。它提供了有关通用映射的宝贵提示,为什么您应该更喜欢不可变域对象以及如何使用 Java 或 Kotlin 对它们进行建模。

6.1。基于元数据的映射

要充分利用 SDN 中的对象映射功能,您应该使用注解对映射的对象进行@Node注解。尽管映射框架没有必要具有此注释(您的 POJO 已正确映射,即使没有任何注释),但它允许类路径扫描器查找并预处理您的域对象以提取必要的元数据。如果你不使用这个注解,你的应用程序在你第一次存储一个域对象时会受到轻微的性能影响,因为映射框架需要建立它的内部元数据模型,以便它知道你的域对象的属性以及如何坚持他们。

6.1.1.映射注释概述

来自 SDN

  • @Node:在类级别应用以指示该类是映射到数据库的候选对象。
  • @Id:应用于字段级别以标记用于标识目的的字段。
  • @GeneratedValue:在字段级别应用,@Id以指定应如何生成唯一标识符。
  • @Property:应用于字段级别以修改从属性到属性的映射。
  • @CompositeProperty:在字段级别应用于 Map 类型的属性,应作为复合材料回读。请参阅复合属性。
  • @Relationship:应用于字段级别以指定关系的详细信息。
  • @DynamicLabels:应用于字段级别以指定动态标签的来源。
  • @RelationshipProperties:在类级别应用以指示该类作为关系属性的目标。
  • @TargetNode: 应用在一个类的字段上@RelationshipProperties,从另一端的角度来标记该关系的目标。

以下注释用于指定转换并确保与 OGM 的向后兼容性。

  • @DateLong
  • @DateString
  • @ConvertWith

有关这方面的更多信息,请参阅转换。

来自 Spring Data commons

  • @org.springframework.data.annotation.Id和 SDN一样@Id,其实@Id是用 Spring Data Common 的 Id-annotation 标注的。
  • @CreatedBy:应用于字段级别以指示节点的创建者。
  • @CreatedDate:应用于字段级别以指示节点的创建日期。
  • @LastModifiedBy:应用于字段级别以指示对节点的最后更改的作者。
  • @LastModifiedDate:在字段级别应用以指示节点的最后修改日期。
  • @PersistenceConstructor:应用于一个构造函数,以在读取实体时将其标记为首选构造函数。
  • @Persistent:在类级别应用以指示该类是映射到数据库的候选对象。
  • @Version:应用于字段级别,用于乐观锁定并检查保存操作的修改。初始值为零,每次更新时都会自动增加。
  • @ReadOnlyProperty:应用于字段级别以将属性标记为只读。该属性将在数据库读取期间被水合,但不受写入影响。当用于关系时,请注意,如果不相关,则该集合中的任何相关实体都不会保留。

查看第 10 章,了解有关审计支持的所有注释。

6.1.2.基本构建块:@Node

注解用于将@Node类标记为受管域类,受映射上下文的类路径扫描。

要将对象映射到图中的节点,反之亦然,我们需要一个标签来标识要映射到和从的类。

@Node有一个属性labels,允许您配置一个或多个标签,以便在读取和写入带注释的类的实例时使用。该value属性是 的别名labels。如果您不指定标签,则简单类名将用作主标签。如果您想提供多个标签,您可以:

  1. 为属性提供一个数组labels。数组中的第一个元素将被视为主标签。
  2. 为 提供一个值primar
首先,需要创建一个Spring Boot项目,并添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-neo4j</artifactId> </dependency> ``` 接下来,需要定义实体类和Repository接口。例如,我们要创建一个搜索系统,需要定义一个节点实体类`SearchNode`和一个关系实体类`SearchRelation`,并分别创建对应的Repository接口`SearchNodeRepository`和`SearchRelationRepository`。 ```java @NodeEntity public class SearchNode { @Id @GeneratedValue private Long id; @Indexed private String title; @Indexed private String content; @Relationship(type = "RELATED_TO", direction = Relationship.OUTGOING) private Set<SearchRelation> relations = new HashSet<>(); // getters and setters } @RelationshipEntity(type = "RELATED_TO") public class SearchRelation { @Id @GeneratedValue private Long id; @StartNode private SearchNode fromNode; @EndNode private SearchNode toNode; // getters and setters } public interface SearchNodeRepository extends Neo4jRepository<SearchNode, Long> { List<SearchNode> findByTitleContainingIgnoreCase(String title); } public interface SearchRelationRepository extends Neo4jRepository<SearchRelation, Long> { List<SearchRelation> findByFromNode(SearchNode fromNode); } ``` 在上述代码中,`SearchNode`和`SearchRelation`分别用`@NodeEntity`和`@RelationshipEntity`注解标记为节点和关系实体类。`SearchNode`中包含了`@Relationship`注解,用于描述和`SearchRelation`的关系,其中`type`表示关系类型,`direction`表示关系方向。`SearchNodeRepository`和`SearchRelationRepository`继承自`Neo4jRepository`,可以使用Spring Data Neo4j提供的各种查询方法。 接下来,在`application.properties`文件中配置Neo4j数据库连接信息: ```properties spring.data.neo4j.uri=bolt://localhost:7687 spring.data.neo4j.username=neo4j spring.data.neo4j.password=123456 ``` 最后,可以在Controller中使用上述Repository接口来实现搜索功能,例如: ```java @RestController public class SearchController { @Autowired private SearchNodeRepository searchNodeRepository; @GetMapping("/search") public List<SearchNode> search(@RequestParam String keyword) { return searchNodeRepository.findByTitleContainingIgnoreCase(keyword); } } ``` 在上述代码中,通过`searchNodeRepository.findByTitleContainingIgnoreCase(keyword)`方法来查询包含关键词的节点信息。可以根据具体需求,使用更复杂的查询方法来实现更丰富的搜索功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技能咖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值