图数据库neo4j学习笔记(2)

利用java API调用neo4j

有多种方式比如:使用graphDatabase.driver自己加载驱动方式

使用嵌入式数据库graphDatabaseFactor.XXXXX抽象工厂方式创建

还可以使用spring封装的data形式既SDN。

公司直接使用driver进行加载所以先学习这种方式

创建简单连接驱动

简单示例代码:

import org.neo4j.driver.v1.*;

import static org.neo4j.driver.v1.Values.parameters;

public class GraphDatabaseHelloWorld {

    public GraphDatabaseHelloWorld(String uri, String user, String password)

    {

        driver = GraphDatabase.driver(uri, AuthTokens.basic(user, password));

    }

 

    private void addPerson(String name)

    {

        try (Session session = driver.session())

        {

            try (Transaction tx = session.beginTransaction())

            {

                tx.run("MERGE (a:Person {name: {x}})", parameters("x", name));

                tx.success();

            }

        }

}

private void updatePerson(String name){

        try(Session session = driver.session()){

            session.run("match (a:Person) set a.name = $x", parameters("x", name));

        }

}

 

    private void printPeople(String initial)

    {

        try (Session session = driver.session())

        {

            StatementResult result = session.run(

                    "MATCH (a:Person) WHERE a.name STARTS WITH {x} RETURN a.name AS name",

                    parameters("x", initial));

            while (result.hasNext())

            {

                Record record = result.next();

                System.out.println(record.get("name").asString());

            }

        }

    }

 

    public void close()

    {

        driver.close();

    }

 

    public static void main(String... args)

    {

        GraphDatabaseHelloWorld example = new GraphDatabaseHelloWorld("bolt://localhost:7687", "neo4j", "123321");

        example.addPerson("Ada");

        example.addPerson("Alice");

        example.addPerson("Bob");

        example.printPeople("A");

        example.close();

    }

}

下面是代码解释:

Driver driver = null;

driver = GraphDatabase.driver( uri, AuthTokens.basic( user, password ) );

 

Uri为一个固定的连接路径比如:bolt://localhost:7687由你的neo4j的配置决定。这是一个直接的连接方式,当需要连接有路由选择的时候需要使用bolt+routing的形式,比如:bolt+routing://neo01.graph.example.com?policy=europe

AuthTokens.basic(user,password)是简单的认证方式。User和password是你的数据库帐号和密码

 

driver=GraphDatabase.driver(uri,AuthTokens.kerberos(ticket));

这是使用kerberos连接方式使用的是base64的加密字段加载驱动。

driver=GraphDatabase.driver(uri,AuthTokens.basic(user,password),Config.build().withTrustStrategy(Config.TrustStrategy.trustAllCertificates()).toConfig());

通过证书的方式加载更加安全。

 

driver=GraphDatabase.driver(uri,AuthTokens.basic(user,password),Config.build()

.withMaxConnectionLifetime(30,TimeUnit.MINUTES)

.withMaxConnectionPoolSize(50)

.withConnectionAcquisitionTimeout(2,TimeUnit.MINUTES)

.toConfig());

建立连接池的方式,配置解释从第一个到最后如下:

1. 连接空闲时存活最长时间

2. 连接池最大连接数

3. 连接请求超时时间

 

driver=GraphDatabase.driver(uri,AuthTokens.basic(user,password),Config.build()

.withLoadBalancingStrategy(Config.LoadBalancingStrategy.LEAST_CONNECTED)

.toConfig());

设置负载均衡策略有两种模式:least-connected和round-robin。

 

driver=GraphDatabase.driver(uri,AuthTokens.basic(user,password),Config.build().withMaxTransactionRetryTime(15,SECONDS).toConfig());

设置最长重连时间

 

try(Sessionsession=driver.session()){

session.run("CREATE (a:Person{name:$name})",parameters("name",name));

}

获取会话和运行语句,没有设置事物,默认自动提交

 

 

 

private void addPerson(String name)

    {

        try (Session session = driver.session())

        {

            try (Transaction tx = session.beginTransaction())

            {

                tx.run("MERGE (a:Person {name: {x}})", parameters("x", name));

                tx.success();

            }

        }

}

private void updatePerson(String name){

        try(Session session = driver.session()){

            session.run("match (a:Person) set a.name = $x", parameters("x", name));

        }

}

解释:增加一个节点

 

 

 

private void updatePerson(String name){

        try(Session session = driver.session()){

            session.run("match (a:Person) set a.name = $x", parameters("x", name));

        }

}

 

解释:修改Person标签下的节点

 

 

 

private void printPeople(String initial)

    {

        try (Session session = driver.session())

        {

            StatementResult result = session.run(

                    "MATCH (a:Person) WHERE a.name STARTS WITH {x} RETURN a.name AS name",

                    parameters("x", initial));

            while (result.hasNext())

            {

                Record record = result.next();

                System.out.println(record.get("name").asString());

            }

        }

    }

解释:查询Person标签下面的节点的name属性














全部评论

相关推荐

点赞 评论 收藏
分享
03-30 19:30
石家庄学院 Java
野蛮的柯基在游泳:都能入股了,还得是Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务