Neo4J是既具有传统关系型数据库的优点,又具备NoSQL数据库优势的一种数据库,是一个高性能的NoSQL图数据库,具备完全事务特性。Neo4J将结构化数据存储在一张图上,图中每一个节点的属性表示数据的内容,每一条有向边表示数据的关系。Neo4J没有表结构的概念,它的数据用节点的属性来表示。
图数据库名字的由来其实与其在底层的存储方式有关,Neo4j底层会以图的方式把用户定义的节点以及关系存储起来,通过这种方式,可是高效的实现从某个节点开始,通过节点与节点间关系,找出两个节点间的联系。
整合neo4j,需要加入依赖,如下:
在配置文件中加入如下配置:
这样就整合完成了,非常简单,几乎是零配置。接下来定义模型,定义演员,电影和角色三个模型,一个演员在一个电影里面扮演一个角色,可以创建演员和电影两个实体,还有一个角色关系实体,这个实体模型可以不经过任何转化直接存入数据库,而且仍然是一张图,非常直观。演员模型如下:
可以看到,只是一个简单的Java实体类,像JPA使用了ORM一样,neo4j使用了对象图形映射(OGM)方式建模,使用@JsonIdentityInfo是防止查询数据时引发递归访问效应,@NodeEntity标志类是一个节点实体,@GraphId定义一个节点的唯一性标识,在创建节点时由系统自动生成,是必不可少的。
下面是电影节点的模型:
注解@Relationship表示List<Role>是一个关系列表,type设定了关系的模型,direction设定了关系的方向,Relationship.INCOMING表示以当前节点为终点。addRole定义了一个新增关系的方法。
下面是角色模型:
@RelationshipEntity注解表示这个类是一个关系实体,并用type指定关系模型,@StartNode指定起始节点的实体,@EndNode指定终止节点的实体,这说明了图数据库中一条有向边的起点和终点的定义。
三个节点已经创建完成,可以开始进行数据持久化操作。像对其它数据库的访问和操作一样,spring-boot-starter-data-neo4j提供了丰富的资源库可供调用,因此对于演员和电影节点,可以创建它们对应的资源库接口,实现实体持久化,如电影接口如下:
接下来可以在测试类中测试功能,代码如下:
上面定义了电影和演员,并且把演员加到了电影的角色中,然后持久化,运行代码,可以看到运行成功,并且数据中已经有模型,如下:
可以看到neo4j展示很酷的图形,表示节点的关系,节点的有向边表示在电影中扮演的角色。关于Neo4J的学习可以参考我即将推出的Neo4J教程。
网友评论