品种的创立同布局

因为Neo4j依赖之jar包比较多,所以推举下Maven来治本。

率先创建一个Maven Project,添加依赖:

<dependency>
    <groupId>org.neo4j</groupId>
    <artifactId>neo4j</artifactId>
    <version>3.2.6</version>
</dependency>

动的凡3.2.6版本,对诺版本的Neo4j安装地点摸我。

使用嵌入式数据库

布置好以后,就好开了,第一步是学开启同关闭数据库。

管创建一个初的数据库,还是打开一个业已有些数据库,首先都要创造一个GraphDatabaseService实例。

graphDb = new GraphDatabaseFactory().newEmbeddedDatabase( DB_PATH );

GraphDatabaseService实例可以吃多独线程共享,但是一个数据库只同意发生一个Service实例。

关闭数据库可调用shutdown()方法。

为确保数据库是地关,可以增长一个ShutdownHook来落实关闭数据库的动作。

private static void registerShutdownHook(final GraphDatabaseService graphDb) {
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                graphDb.shutdown();
            }
        });
    }

还可以经过API对数据库的局部部署进行安装。

无异于种办法是加载.conf配置文件。

GraphDatabaseService graphDb = new GraphDatabaseFactory()
    .newEmbeddedDatabaseBuilder( testDirectory.graphDbDir() )
    .loadPropertiesFromFile( pathToConfig + "neo4j.conf" )
    .newGraphDatabase();

其他一样种方法就是是经艺术来添加。

GraphDatabaseService graphDb = new GraphDatabaseFactory()
    .newEmbeddedDatabaseBuilder( testDirectory.graphDbDir() )
    .setConfig( GraphDatabaseSettings.pagecache_memory, "512M" )
    .setConfig( GraphDatabaseSettings.string_block_size, "60" )
    .setConfig( GraphDatabaseSettings.array_block_size, "300" )
    .newGraphDatabase();

创建一个只有念之数据库,数据库必须就存在。

graphDb = new GraphDatabaseFactory().newEmbeddedDatabaseBuilder( dir )
        .setConfig( GraphDatabaseSettings.read_only, "true" )
        .newGraphDatabase(); 

重复多安排信息可关押GraphDatabaseSettings类的文档。

始建节点和涉嫌

祈求数据库是一个有往图,由经涉及Relationships连日来的节点Nodes整合,节点和干可来自己的性质Properties。 

关联之档次可以经枚举enum创建(Label也得):

private static enum RelTypes implements RelationshipType
{
    RELEASED;
}

 在Neo4j中,对于数据库的操作需要在一个工作transaction中执行。

try ( Transaction tx = graphDb.beginTx() )
{
    // 数据库操作写在事务提交之前
    tx.success();
}

下面是一个简短的实例,实现了节点和关联的创立。

try (Transaction tx = graphDb.beginTx()) {
            // 创建标签
            label1 = Label.label("Musician");
            label2 = Label.label("Album");
            // 创建节点
            node1 = graphDb.createNode(label1);
            node1.setProperty("name", "Jay Chou");
            node2 = graphDb.createNode(label2);
            node2.setProperty("name", "Fantasy");
            // 创建关系及属性
            relationship = node1.createRelationshipTo(node2, RelTypes.RELEASED);
            relationship.setProperty("date", "2001-09-14");
            // 结果输出
            System.out.println("created node name is" + node1.getProperty("name"));
            System.out.println(relationship.getProperty("date"));
            System.out.println("created node name is" + node2.getProperty("name"));
            // 提交事务
            tx.success();
        }

 对于节点,除了安装属性,还可上加标签Labels。添加签后便相当给对节点开展了分组,使节点的询问与管理越来越清楚和有利,并且增长了询问的属性。标签是一个而摘,没有签呢是可的。

跟关系数据库相比,标签相当给表名。一个节点相当给表中之一条龙数,节点的性质就是字段。区别是,一个节点可以出多个标签

足看出咱们创建了有限独节点,名字是“周杰伦”和“《范特西》”,对应的签分别是音乐家和专辑。

她俩之间通过“发行”这个涉及连接,其中发行的习性为批发日期。

开辟Neo4j数据库,输入查询语句match (n) return n,可以看来数据让形容副了进。

香港澳门葡京网址 1

询问以及创新

了解了节点的标签和一致条属性,就好透过findNode()方式查询节点。

下一场用setProperty()办法来更新和添加属性。 

try (Transaction tx = graphDb.beginTx()) {
            // 查询节点
            Label label = Label.label("Musician");
            Node node = graphDb.findNode(label, "name", "Jay Chou");
            System.out.println("query node name is " + node.getProperty("name"));
            // 更新节点
            node.setProperty("birthday", "1979-01-18");
            System.out.println(node.getProperty("name") + "'s birthday is " + node.getProperty("birthday", new String()));
            // 提交事务
            tx.success();
        }

开辟Neo4j查看结果:

香港澳门葡京网址 2

删除关系和节点

剔除数据经常,只需要履行有关实业对应之delete()措施即可。

执行删除操作时,需要遵守如下规则:剔除节点时,如果该节点是涉嫌,则要事先去关系。这么做的目的是承保平等久涉及永远有开始与得了香港澳门葡京网址节点。

try (Transaction tx = graphDb.beginTx()) {
            // 获得节点
            Label label = Label.label("Album");
            Node node = graphDb.findNode(label, "name", "Fantasy");
            // 获得关系
            Relationship relationship = node.getSingleRelationship(RelTypes.Released, Direction.INCOMING);
            // 删除关系和节点
            relationship.delete();
            relationship.getStartNode().delete();
            node.delete();
            tx.success();
        }

一体化代码

  1 package edu.heu.kg.graphdb;
  2 
  3 import java.io.File;
  4 
  5 import org.neo4j.graphdb.Direction;
  6 import org.neo4j.graphdb.GraphDatabaseService;
  7 import org.neo4j.graphdb.Label;
  8 import org.neo4j.graphdb.Node;
  9 import org.neo4j.graphdb.Relationship;
 10 import org.neo4j.graphdb.RelationshipType;
 11 import org.neo4j.graphdb.Transaction;
 12 import org.neo4j.graphdb.factory.GraphDatabaseFactory;
 13 
 14 /**
 15  * @ClassName: GraphDatabaseHelloWorld
 16  * @Description: TODO
 17  * @author LJH
 18  * @date 2017年12月22日 下午4:09:33
 19  */
 20 public class GraphDatabaseHelloWorld {
 21 
 22     private static final File DB_PATH = new File("D:\\Neo4jDb");
 23     private static GraphDatabaseService graphDb;
 24 
 25     private static void registerShutdownHook(final GraphDatabaseService graphDb) {
 26         Runtime.getRuntime().addShutdownHook(new Thread() {
 27             @Override
 28             public void run() {
 29                 graphDb.shutdown();
 30             }
 31         });
 32     }
 33 
 34     private static enum RelTypes implements RelationshipType {
 35         RELEASED;
 36     }
 37 
 38     @SuppressWarnings("unused")
 39     private static void addData() {
 40         Node node1;
 41         Node node2;
 42         Label label1;
 43         Label label2;
 44         Relationship relationship;
 45 
 46         try (Transaction tx = graphDb.beginTx()) {
 47             // 创建标签
 48             label1 = Label.label("Musician");
 49             label2 = Label.label("Album");
 50             // 创建节点
 51             node1 = graphDb.createNode(label1);
 52             node1.setProperty("name", "Jay Chou");
 53             node2 = graphDb.createNode(label2);
 54             node2.setProperty("name", "Fantasy");
 55             // 创建关系及属性
 56             relationship = node1.createRelationshipTo(node2, RelTypes.Released);
 57             relationship.setProperty("date", "2001-09-14");
 58             // 结果输出
 59             System.out.println("created node name is " + node1.getProperty("name"));
 60             System.out.println(relationship.getProperty("date"));
 61             System.out.println("created node name is " + node2.getProperty("name"));
 62             // 提交事务
 63             tx.success();
 64         }
 65         graphDb.shutdown();
 66     }
 67 
 68     @SuppressWarnings("unused")
 69     private static void queryAndUpdate() {
 70         try (Transaction tx = graphDb.beginTx()) {
 71             // 查询节点
 72             Label label = Label.label("Musician");
 73             Node node = graphDb.findNode(label, "name", "Jay Chou");
 74             System.out.println("query node name is " + node.getProperty("name"));
 75             // 更新节点
 76             node.setProperty("birthday", "1979-01-18");
 77             System.out
 78                     .println(node.getProperty("name") + "'s birthday is " + node.getProperty("birthday", new String()));
 79             // 提交事务
 80             tx.success();
 81         }
 82         graphDb.shutdown();
 83     }
 84 
 85     @SuppressWarnings("unused")
 86     private static void delete() {
 87         try (Transaction tx = graphDb.beginTx()) {
 88             // 获得节点
 89             Label label = Label.label("Album");
 90             Node node = graphDb.findNode(label, "name", "Fantasy");
 91             // 获得关系
 92             Relationship relationship = node.getSingleRelationship(RelTypes.RELEASED, Direction.INCOMING);
 93             // 删除关系和节点
 94             relationship.delete();
 95             relationship.getStartNode().delete();
 96             node.delete();
 97             tx.success();
 98         }
 99         graphDb.shutdown();
100     }
101 
102     public static void main(String[] args) {
103         graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);
104         registerShutdownHook(graphDb);
105         addData();
106         // queryAndUpdate();
107         // delete();
108 
109     }
110 
111 }

转载请注明原文链接:http://www.cnblogs.com/justcooooode/p/8179202.html

参考资料

 https://neo4j.com/docs/java-reference/3.2

《Neo4j 实战》

《Neo4j全栈开发》

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图