- 内容提要
- 序
- 前言
- 第一部分 背景知识
- 第 1 章 Spring Data 项目
- 第 2 章 Repository:便利的数据访问层
- 第 3 章 使用 Querydsl 实现类型安全的查询
- 第二部分 关系型数据库
- 第 4 章 JPA Repository
- 第 5 章 借助 Querydsl SQL 实现类型安全的 JDBC 编程
- 第三部分 NoSQL
- 第 6 章 MongoDB: 文档存储
- 第 7 章 Neo4j:图数据库
- 第 8 章 Redis:键/值存储
- 第四部分 快速应用开发
- 第 9 章 使用 Spring Roo 实现持久层
- 第 10 章 REST Repository 导出器
- 第五部分 大数据
- 第 11 章 Spring for Apache Hadoop
- 第 12 章 使用 Hadoop 分析数据
- 第 13 章 使用 Spring Batch 和 Spring Integration 创建大数据管道
- 第六部分 数据网格
- 第 14 章 分布式数据网格:GemFire
- 关于封面
7.5 使用 Spring Data Neo4j 持久化领域对象
在将领域对象存储到图中之前,首先需要搭建工程。除了那些常用的 Spring 依赖,还需要添加 org.springframe work.data:spring-data-neo4j:2.1.0.RELEASE(对于简单映射)或 org.springframework.data:spring-data-neo4j-aspects:2.1.0.RELEASE(对于基于 AspectJ 的高级映射,参见 7.9 小节)的依赖。Neo4j 会自动引入进来(简单起见,假设是嵌入式的 Neo4j 部署)。
最少的 Spring 配置只是简单的命名空间设置,它同时会建立图数据库,如示例 7-13 所示。
示例 7-13 Spring 的搭建配置
如示例 7-14 所示,也可以传递 graphDatabaseService 实例到 neo4j:config 中,这样的话就可以配置图数据库的缓存、内存使用以及升级策略了。在这里甚至可以使用基于内存的 ImpermanentGraphDatabase 来进行测试。
示例 7-14 传递 graphDatabaseService 到配置之中
在定义了领域对象并将环境搭建起来之后,可以很容易地生成用于阐述用例的示例数据集(如示例 7-15 和图 7-4 所示)。用于阐述这个用例的领域类、数据集生成以及集成测试都能在本书的 GitHub 仓库中找到(更多信息可以参考 1.4 小节“示例代码”了解)。为了导入数据,可以填充领域类并使用 template.save(entity) 方法,这个方法会与图中已有的元素进行合并或者创建新的元素。这取决于映射 ID 以及可能存在的唯一域声明,它们可以用来识别图中我们要进行合并的已有实体。
示例 7-15 使用示例数据集填充图
这里显示的实体使用了一些便利的方法进行构造,从而提供了可读性更好的搭建过程,如图 7-4 所示。
图 7-4 导入领域数据的图
7.5.1 Neo4jTemplate
Neo4jTemplate 类似于其他的 Spring 模板:在低层级的 API 之上构建了便利化 API,在这里低层级的 API 指的就是 Neo4j API。它添加了一些常见的便捷功能,如事务处理和异常转换,但更为重要的是对领域实体的自动化映射。Neo4jTemplate 也用于 Spring Data Neo4j 的其他基础设施之中。对其进行搭建时,需要在应用上下文中添加<neo4j:config/>或者创建实例,它要传递 Neo4j 的 GraphDatabaseService 进来(这个类可以作为 Spring Bean 来进行获取,如果想直接访问 Neo4j API,可以把它注入到代码之中)。
创建实体、节点和关系并且按照 id 对其进行查找和移除构成了基本的操作(save()、getOrCreateNode()、findOne()、getNode()、getRelationshipsBetween() 等)。其他的一些大多数机制都是以更为高级的方式在图中进行有趣的查找 - 使用 lookup() 方法进行索引查找、使用 query() 执行 Cypher 语句以及通过 traverse() 运行遍历。Neo4jTemplate 提供了 load() 方法将节点转换为实体或者将实体通过 projectTo() 方法转换为不同的类型(参见 7.7.1 小节的“单个节点的多重角色”)。懒加载的实体可以通过 fetch() 方法进行完整的加载。
通过 Neo4jTemplate 这个类就可以实现大多数你所希望的 Spring Data Neo4j 功能,但是对 Repository 的支持能够让你以更为便利的方式执行很多操作。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论