图数据库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属性














全部评论

相关推荐

在笔试的大西瓜很矫健:校招数分不用想了,这经历和学历都不够用,大厂更别想,初筛都过不了,说点不好听的小厂数分都进不去(小厂也是假数分),要两个对口实习+3个项目(或者3+2),而且要有含金量才能补一点你的学历劣势。 建议刷实习,社招找数分,校招看运气,能入行业就行,可以运营转数分
点赞 评论 收藏
分享
刚刷到字节跳动官方发的消息,确实被这波阵仗吓了一跳。在大家还在纠结今年行情是不是又“寒冬”的时候,字节直接甩出了史上规模最大的转正实习计划——ByteIntern。咱们直接看几个最硬的数,别被花里胡哨的宣传词绕晕了。首先是“量大”。全球招7000多人是什么概念?这几乎是把很多中型互联网公司的总人数都给招进来了。最关键的是,这次的资源分配非常精准:研发岗给了4800多个Offer,占比直接超过六成。说白了,字节今年还是要死磕技术,尤其是产品和AI领域,这对于咱们写代码的同学来说,绝对是今年最厚的一块肥肉。其次是大家最关心的“转正率”。官方直接白纸黑字写了:整体转正率超过50%。这意味着只要你进去了,不划水、正常干,每两个人里就有一个能直接拿校招Offer。对于2027届(2026年9月到2027年8月毕业)的同学来说,这不仅是实习,这简直就是通往大厂的快捷通道。不过,我也得泼盆冷水。坑位多,不代表门槛低。字节的实习面试出了名的爱考算法和工程实操,尤其是今年重点倾斜AI方向,如果你简历里有和AI相关的项目,优势还是有的。而且,转正率50%也意味着剩下那50%的人是陪跑的,进去之后的考核压力肯定不小。一句话总结: 27届的兄弟们,别犹豫了。今年字节这是铁了心要抢提前批的人才,现在投递就是占坑。与其等到明年秋招去千军万马挤独木桥,不如现在进去先占个工位,把转正名额攥在手里。
喵_coding:别逗了 50%转正率 仔细想想 就是转正与不转正
字节7000实习来了,你...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务