bboyjing's blog

Neo4j学习笔记二【Neo4j Java Api的使用】

为了循序渐进,本章节将使用最基本的Neo4j Java Api构造上一章节图一的数据结构。

搭建环境

建一普通的maven工程即可,这个就不多说了,Neo4j依赖版本如下,暂时只用到这一个依赖。

1
2
3
4
5
6
7
<dependencies>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j</artifactId>
<version>3.1.0-M03</version>
</dependency>
</dependencies>

使用Java Api构造数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
public static void main(String[] args){
/**
* 指定Neo4j存储路径
*/
File file = new File("/opt/neo4j-community-3.0.3/data/databases/graph.db");
GraphDatabaseService graphDB = new GraphDatabaseFactory().newEmbeddedDatabase(file);
try(Transaction tx = graphDB.beginTx()){
/**
* 新增User节点
* 每个节点设置name属性
* 添加Lable以区分节点类型
*/
Node user1 = graphDB.createNode();
user1.setProperty("name", "John Johnson");
user1.addLabel(MyLabels.USERS);
Node user2 = graphDB.createNode();
user2.setProperty("name", "Kate Smith");
user2.addLabel(MyLabels.USERS);
Node user3 = graphDB.createNode();
user3.setProperty("name", "Jack Jeffries");
user3.addLabel(MyLabels.USERS);
/**
* 为user1添加Friend关系
* 注:Neo4j的关系是有向的箭头,正常来讲Friend关系应该是双向的,
* 此处为了简单起见,将关系定义成单向的,不会影响后期的查询
*/
user1.createRelationshipTo(user2,MyRelationshipTypes.IS_FRIEND_OF);
user1.createRelationshipTo(user3,MyRelationshipTypes.IS_FRIEND_OF);
/**
* 新增Movie节点
* 每个节点设置name属性
* 添加Lable以区分节点类型
*/
Node movie1 = graphDB.createNode();
movie1.setProperty("name", "Fargo");
movie1.addLabel(MyLabels.MOVIES);
Node movie2 = graphDB.createNode();
movie2.setProperty("name", "Alien");
movie2.addLabel(MyLabels.MOVIES);
Node movie3 = graphDB.createNode();
movie3.setProperty("name", "Heat");
movie3.addLabel(MyLabels.MOVIES);
/**
* 为User节点和Movie节点之间添加HAS_SEEN关系
* HAS_SEEN关系设置stars属性
*/
Relationship relationship1 = user1.createRelationshipTo(movie1, MyRelationshipTypes.HAS_SEEN);
relationship1.setProperty("stars", 5);
Relationship relationship2 = user2.createRelationshipTo(movie3, MyRelationshipTypes.HAS_SEEN);
relationship2.setProperty("stars", 3);
Relationship relationship6 = user2.createRelationshipTo(movie2, MyRelationshipTypes.HAS_SEEN);
relationship6.setProperty("stars", 6);
Relationship relationship3 = user3.createRelationshipTo(movie1, MyRelationshipTypes.HAS_SEEN);
relationship3.setProperty("stars", 4);
Relationship relationship4 = user3.createRelationshipTo(movie2, MyRelationshipTypes.HAS_SEEN);
relationship4.setProperty("stars", 5);
System.out.println("成功");
tx.success();
}
//关闭数据库
graphDB.shutdown();
}

以上示例用到的两个枚举类如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* Label类型枚举类
*/
public enum MyLabels implements Label{
MOVIES,USERS
}
/**
* 关系类型枚举类
*/
public enum MyRelationshipTypes implements RelationshipType {
IS_FRIEND_OF,
HAS_SEEN
}

至此,数据构建完毕,可以启动neo4j console查看结果,下一章将对构建的数据进行遍历。