• 欢迎光临~

Neo4j:java客户端操作

开发技术 开发技术 2022-05-21 次浏览

Neo4j数据库访问

Neo4j访问的两种方式

  • 嵌入式数据库
  • 服务器模式(通过REST的访问)

它是由应用程序的性质(neo4j是独立服务器 还是和程序在一起),性能,监控和数据安全性来决定架构选择。

An embedded database(嵌入式数据库)

嵌入式Neo4j数据库是性能的最佳选择。 通过指定数据存储的路径以编程方式访问嵌入式数据库。

我们选择嵌入式数据库出于以下原因:

  • 使用Java作为我们项目的编程语言时
  • 应用程序是独立的
  • 程序追求很高的性能

Neo4j Server(服务器模式)

Neo4j Server是相互操作性,安全性和监控的最佳选择。 实际上,REST接口允许所有现代平台和编程 语言与它进行互操作。 此外,作为独立应用程序,它比嵌入式配置更安全(客户端中的潜在故障不会影响服务器),并且更易于监控。 如果我们选择使用这种模式,我们的应用程序将充当Neo4j服务器的客户端。要连接到Neo4j服务器,可以使用任何编程语言的REST 访问数据库。

Java客户端操作Neo4j

嵌入式模式

引入依赖:

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

添加数据:

public class EmbeddedNeo4jAdd {

    private static final File databaseDirectory = new File( "target/graph.db" );

    public static void main(String[] args) {
        GraphDatabaseService databaseService = new GraphDatabaseFactory().newEmbeddedDatabase(databaseDirectory);
        Transaction tx = databaseService.beginTx();
        Node node = databaseService.createNode();
        node.setProperty("name", "tom");
        node.setProperty("age", 20);
        node.addLabel(Label.label("Person"));

        //定义cql
        String cql = "create(p:Person {name:'jerry',age:10}) return p";
        databaseService.execute(cql);

        tx.success();
        tx.close();
        databaseService.shutdown();
    }
}

查询数据:

public class EmbeddedNeo4jQueryAll {

    private static final File databaseDirectory = new File( "target/graph.db" );

    public static void main(String[] args) {
        GraphDatabaseService graphDb = new
                GraphDatabaseFactory().newEmbeddedDatabase(databaseDirectory);
        Transaction tx = graphDb.beginTx();

        String cql = "MATCH (a:Person) where a.name = $name return a";
        Map<String, Object> paramerters = new HashMap<String, Object>();
        paramerters.put("name", "tom");
        Result result = graphDb.execute(cql, paramerters);
        while (result.hasNext()) {
            Map<String, Object> row = result.next();
            for (String key : result.columns()) {
                Node nd = (Node) row.get(key);
                System.out.printf("%s = %s:%s%n", key, nd.getProperty("name"), nd.getProperty("age"));
            }
        }
        tx.success();
        tx.close();
        graphDb.shutdown();
    }

}

Neo4j:java客户端操作

服务器模式

引入驱动包:

<dependency>
    <groupId>org.neo4j</groupId>
    <artifactId>neo4j-ogm-bolt-driver</artifactId>
    <version>3.2.10</version>
</dependency>

示例代码:

public class Neo4jServerMain {
    public static void main(String[] args) {
        Driver driver = GraphDatabase.driver( "bolt://192.168.40.128:7687",
                AuthTokens.basic( "neo4j", "xxxxx" ) );
        Session session = driver.session();
        String cql = "MATCH (a:Person) RETURN a ";
        Result result = session.run(cql);
        while ( result.hasNext() ) {
            Record record = result.next();
            Value value = record.get("a");
            System.out.println( value.get( "name" ).asString() + " " + value.get( "age" ) );
        }
        session.close();
        driver.close();
    }
}

Neo4j:java客户端操作

public class Neo4jServerMain2 {

    public static void main(String[] args) {
        Driver driver = GraphDatabase.driver( "bolt://192.168.40.128:7687",
                AuthTokens.basic( "neo4j", "QWE340721" ) );
        Session session = driver.session();
        String cql = "MATCH p=shortestPath((person:Person {name:$startName})- [*]-(person2:Person {name:$endName} )) RETURN p";
        Result result = session.run( cql,parameters("startName","王启年","endName","九品射手燕小乙") );
        while ( result.hasNext() )
        {
            Record record = result.next();
            System.out.println(record);
        }
        session.close();
        driver.close();
    }
}

Neo4j:java客户端操作

程序员灯塔
转载请注明原文链接:Neo4j:java客户端操作
喜欢 (0)