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

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

6.3.3.一般建议

  • 尝试坚持使用不可变对象 ——不可变对象很容易创建,因为实现对象只需调用其构造函数即可。此外,这可以防止您的域对象被允许客户端代码操纵对象状态的 setter 方法乱扔垃圾。如果您需要这些,最好将它们包保护起来,以便它们只能被有限数量的并置类型调用。仅构造函数实现比属性填充快 30%。
  • 提供一个全参数的构造函数 ——即使你不能或不想将你的实体建模为不可变值,提供一个将实体的所有属性作为参数(包括可变属性)的构造函数仍然有价值,因为这允许对象映射以跳过属性填充以获得最佳性能。
  • 使用工厂方法而不是重载的构造函数来避免@PersistenceConstructor - 使用最佳性能所需的全参数构造函数,我们通常希望公开更多特定于应用程序用例的构造函数,这些构造函数省略自动生成的标识符等内容。这是一种既定的模式,而不是使用静态工厂方法来公开这些全参数构造函数的变体。
  • 确保遵守允许使用生成的实例化器和属性访问器类的约束
  • 对于要生成的标识符,仍然使用 final 字段结合 wither 方法
  • 使用 Lombok 避免样板代码 - 由于持久性操作通常需要一个构造函数来获取所有参数,因此它们的声明变成了对字段分配的样板参数的繁琐重复,使用 Lombok 可以最好地避免这种情况@AllArgsConstructor。

关于不可变映射的说明

尽管我们建议尽可能使用不可变映射和构造,但在映射方面存在一些限制。给定一个双向关系,其中A有一个构造函数引用B和B一个引用A,或者更复杂的场景。Spring Data Neo4j 无法解决这种先有后有的情况。在它的实例化过程中,A它迫切需要一个完全实例化的B另一方面,它需要一个. SDN 通常允许这样的模型,但会抛出一个AMappingException如果从数据库返回的数据包含上述星座,则在运行时。在这种情况下,您无法预见返回的数据是什么样的,您更适合使用可变字段来处理关系。

6.3.4.Kotlin 支持

Spring Data 调整了 Kotlin 的细节以允许对象创建和变异。

Kotlin 对象创建

Kotlin 类支持实例化,默认情况下所有类都是不可变的,需要明确的属性声明来定义可变属性。考虑以下data类Person:

data class Person(val id: String, val name: String)

上面的类编译为具有显式构造函数的典型类。我们可以通过添加另一个构造函数来自定义这个类,并用注释@PersistenceConstructor来指示构造函数的偏好:

data class Person(var id: String, val name: String) {

    @PersistenceConstructor
    constructor(id: String) : this(id, "unknown")
}

Kotlin 通过在未提供参数时允许使用默认值来支持参数可选性。当 Spring Data 检测到具有参数默认值的构造函数时,如果数据存储不提供值(或简单地返回null),它将使这些参数不存在,因此 Kotlin 可以应用参数默认值。考虑以下应用参数默认值的类name

data class Person(var id: String, val name: String = "unknown")

每次name参数不是结果的一部分或其值为null时,name默认为unknown。

Kotlin 数据类的属性总体

在 Kotlin 中,默认情况下所有类都是不可变的,并且需要显式的属性声明来定义可变属性。考虑以下data类Person:

data class Person(val id: String, val name: Str
### Spring Boot Starter Data Neo4j 6.2 文档与使用实例 对于版本为 6.2 的 Spring Boot Starter Data Neo4j,此组件提供了简化的方式用于集成 Neo4j 图数据库到应用程序中。通过依赖管理机制自动配置Neo4jTemplate 和 SessionFactory 实例化过程[^1]。 为了在项目里加入该 starter,在 `pom.xml` 中添加如下依赖声明: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-neo4j</artifactId> <version>6.2.0</version> </dependency> ``` 当引入上述依赖之后,可以定义实体类映射至图节点以及关系类型。下面是一个简单的例子展示如何创建一个表示用户的实体类,并将其存储于 Neo4j 数据库内: ```java import org.neo4j.ogm.annotation.Id; import org.neo4j.ogm.annotation.NodeEntity; @NodeEntity public class User { @Id private Long id; private String name; } ``` 接着可以通过 Repository 接口实现数据访问层的操作方法。Spring Data Neo4j 提供了丰富的 CRUD 方法支持无需额外编码即可完成基本增删改查功能。 ```java import org.springframework.data.repository.CrudRepository; public interface UserRepository extends CrudRepository<User, Long> { } ``` 最后一步是在主应用类上启用 Neo4j 支持并注入所需的仓库接口以便调用其提供的服务函数。 ```java @SpringBootApplication @EnableNeo4jRepositories public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Autowired private UserRepository userRepository; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

技能咖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值