Neo4j在java中的使用

这篇具有很好参考价值的文章主要介绍了Neo4j在java中的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.Neo4j访问的两种方式

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

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

An embedded database(嵌入式数据库)

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

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

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

Neo4j Server(服务器模式)

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

2.Java客户端操作Neo4j

1…嵌入式模式

<dependency>
	<groupId>org.neo4j</groupId>
	<artifactId>neo4j</artifactId>
	<version>4.0.1</version>
</dependency>
public class EmbeddedNeo4jAdd {
    private static final File databaseDirectory = new File( "target/graph.db" );
    public static void main(String[] args) {
        GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(databaseDirectory);
        System.out.println("Database Load!");
        Transaction tx = graphDb.beginTx();
        Node n1 = graphDb.createNode();
        n1.setProperty("name", "张三");
        n1.setProperty("character", "A");
        n1.setProperty("gender",1);
        n1.setProperty("money", 1101);
        n1.addLabel(new Label() {
            @Override
            public String name() {
                return "Person";
            }
        });
        String cql = "CREATE (p:Person{name:'李四',character:'B',gender:1,money:21000})";
        graphDb.execute(cql);
        tx.success();
        tx.close();
        System.out.println("Database Shutdown!");
        graphDb.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);
        System.out.println("Database Load!");
        String cql = "MATCH (a:Person) where a.money < $money return a";
        Map<String, Object> paramerters = new HashMap<String, Object>();
        paramerters.put("money", 25000);
        Transaction tx = graphDb.beginTx();
        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("money"));
            }
        }
        tx.success();
        tx.close();
        System.out.println("Database Shutdown!");
        graphDb.shutdown();
    }
}

2.服务器模式

<dependency>
	<groupId>org.neo4j</groupId>
	<artifactId>neo4j-ogm-bolt-driver</artifactId>
	<version>3.2.12</version>
</dependency>
public class Neo4jServerMain {
    public static void main(String[] args) {
        Driver driver = GraphDatabase.driver( "bolt://127.0.0.1:7687", AuthTokens.basic( "neo4j", "123456" ) );
        Session session = driver.session();
        String cql = "MATCH (a:Person) WHERE a.money > $money " +
                "RETURN a.name AS name, a.money AS money order by a.money ";
        Result result = session.run( cql,parameters( "money", 1000 ) );
        while ( result.hasNext() )
        {
            Record record = result.next();
            System.out.println( record.get( "name" ).asString() + " " +
                    record.get( "money" ).asDouble() );
        }
        session.close();
        driver.close();
    }
}
public class Neo4jServerMain2 {
    public static void main(String[] args) {
        Driver driver = GraphDatabase.driver( "bolt://127.0.0.1:7687", AuthTokens.basic( "neo4j", "123456" ) );
        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();
    }
}

3.SpringBoot 整合Neo4j

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.release</groupId>
    <artifactId>neo4j-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
        </dependency>
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-bolt-driver</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>
@NodeEntity
@Data
public class Person {
    @Id
    @GeneratedValue
    private Long id;
    @Property("cid")
    private int pid;
    @Property
    private String name;
    private String character;
    private double money;
    private int gender;
    private int age;
    private String description;
    @Relationship(type = "Friends", direction = Relationship.INCOMING)
    private Set<Person> relationPersons;
}
@Repository
public interface PersonRepository extends Neo4jRepository<Person, Long> {

    @Query("match(p:Person) where p.money>$money return p")
    List<Person> personList(@Param("money") double money);

    /**
     * 指定开始的名字 和 结束的名字 查询最短路径 限定深度为4以层包含4
     */
    @Query("match p=shortestPath((person:Person{name:$startName})-[*1..4]- (person2:Person {name:$endName})) return p")
    List<Person> shortestPath(@Param("startName") String startName, @Param("endName") String endName);
}
@Service
public class Neo4jPersonService {

    @Autowired
    private PersonRepository personRepository;

    public List<Person> personList(double money) {
        return personRepository.personList(money);
    }

    public Person save(Person person) {
        return personRepository.save(person);
    }

    public List<Person> shortestPath(String startName, String endName) {
        return personRepository.shortestPath(startName, endName);
    }
}
@SpringBootApplication
public class TestNeo4jBootApp {

    public static void main(String[] args) {
        ApplicationContext app = SpringApplication.run(TestNeo4jBootApp.class, args);

        Neo4jPersonService personService = app.getBean(Neo4jPersonService.class);
        System.out.println(personService);
        Person person = new Person();
        person.setName("庆帝");
        person.setAge(35);
        person.setCharacter("qingdi");
        person.setGender(0);
        person.setDescription("范闲的爹");
        person.setMoney(10000);
        Person save = personService.save(person);
        System.out.println("save:" + save);
        List<Person> peopleList = personService.personList(100);
        for (Person person1 : peopleList) {
            System.out.println("person1:" + person1);
        }
    }
}

到了这里,关于Neo4j在java中的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图数据库(五):Neo4j中的更新操作

    学过Mysql的人都知道,对于数据库的操作大多数都是增删改查,同样对于Neo4j图数据库也一样,今天我们就学习一下Neo4j中的更新操作。 使用set来修改节点,属性的值,但是如果该属性没有就新增该属性 此时我们可以看到,在id为172的Role节点中没有age属性,我们使用set属性就

    2024年02月07日
    浏览(47)
  • 图数据库(四):Neo4j中的删除操作

    Delete 在Neo4j中说到删除节点,我们第一时间想到的肯定是Delete。 的确我们也经常使用Delete来删除节点。 删除节点 如果节点,没有关联关系那可以直接使用delete删除 如果节点存在关联关系,那么我们使用delete删除就会报错 此时如果一定要删除,那么我们可以使用deta

    2024年02月13日
    浏览(51)
  • Neo4j数据库使用相关

    做知识图谱相关项目,初步使用了neo4j数据库,简单记录一下使用过程和踩坑备忘~ 操作系统Win10+Neo4j社区版(community,版本4.4.30) 目录 一、安装 1.1 安装Java和Neo4j 1.2 环境变量设置 二、 Neo4j使用 2.1 安装服务 2.2 数据库使用 2.3 数据库备份  Java下载链接:Java Downloads | Oracle

    2024年04月16日
    浏览(63)
  • Neo4j | 保姆级教学之如何清空neo4j数据库

    要清空neo4j数据库,需要进行以下操作: 停止Neo4j服务器,关闭Neo4j的所有连接。 找到 Neo4j 数据库存储的目录,通常是 data/databases/ 。 删除该目录中的所有文件和子目录。 请注意,这将不可逆地删除数据库的所有内容,包括节点、关系和属性等数据。在执行这个操作之前,请

    2024年02月06日
    浏览(53)
  • 图数据库_Neo4j和SpringBoot整合使用_实战创建明星关系图谱---Neo4j图数据库工作笔记0010

    2023-09-10 10:37:48 补充 注意:下面是旧版本的语法,如果你发现@NodeEntity这样的注解没有的话可以这样: 这里就要用@Node 另外如果@StartNode和@EndNode都没有了,那么说明是用法变了. 关于最新的用法,在官网有明确的说明和案例,很有用: 下面给出官网的案例:

    2024年02月12日
    浏览(47)
  • 图数据库(三):Neo4j中的Create和Merge

    在上篇文章中,我们介绍了在项目中如何使用Java来操作Neo4j图数据库。今天我们就仔细的学习一下,Neo4j中如何创建节点,以及Create和Merge的区别使用。 Create的简单用法 在Neo4j中,我们使用Create来创建节点。 我们创建一个Role标签的节点,属性name的值为主角,age的值为10 on c

    2024年02月09日
    浏览(41)
  • 图数据库—Neo4j使用指南

    目录 Q / A Neo4j 安装 Basic concept Cypher Basic MATCH 查询 WITH INDEX 索引 最短路径 Shortest path Movie Graph Create 创建 Find 查找 Query 查询 Solve 最短路径 Bacon Path Recommend 推荐 Clean up 删除电影数据 LOAD CSV 加载 Persons Movies 数据 Northwind Graph Northwind 数据表结构 加载 Product Catalog CSV 文件 创建 Pr

    2024年02月02日
    浏览(51)
  • Neo4j数据库介绍及简单使用

    图数据库是一种专门设计用于存储和管理图形数据的数据库类型。在图数据库中,数据以图的形式表示,其中节点表示实体,边表示实体之间的关系。这种表示方式非常适合处理具有复杂关系的数据,如社交网络、推荐系统、网络拓扑、生物信息学等领域的数据。 图数据库通

    2024年02月04日
    浏览(47)
  • Neo4j图数据库的使用笔记

    安装准备: neo4j-3.4.0版本的zip包 找个目录解压安装zip包 启动neo4j 下载neo4j-3.4.0版本的zip包 可以去neo4j官网下载,也可以去微云数聚官网下载。 微云数聚是neo4j在国内的代理商。 解压到F:neo4jneo4j-chs-community-3.4.0-windows 控制台方式启动neo4j 通过7474端口访问neo4j提供的web管理工具

    2024年02月16日
    浏览(42)
  • 图数据库_Neo4j和SpringBoot Data整合使用_实战创建明星关系图谱---Neo4j图数据库工作笔记0010

    2023-09-10 10:37:48 补充 注意:下面是旧版本的语法,如果你发现@NodeEntity这样的注解没有的话可以这样: 这里就要用@Node 另外如果@StartNode和@EndNode都没有了,那么说明是用法变了. 关于最新的用法,在官网有明确的说明和案例,很有用: 下面给出官网的案例:

    2024年02月09日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包