Java操作Neo4J就是这么简单!

简介: 前几天阿粉给大家扩展了关于 Neo4J 图谱数据库的内容,今天阿粉教给大家如何使用 Java 来操作 Neo4j 数据库。

前几天阿粉给大家扩展了关于 Neo4J 图谱数据库的内容,今天阿粉教给大家如何使用 Java 来操作 Neo4j 数据库。

使用 Java 操作 Neo4J

首先我们先使用原生的这种方式,导入 jar 包,然后:

public class TestController {
    public static void main(String[] args) {
        Driver driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j", "Yinlidong1995."));
        Session session = driver.session();
        session.run("CREATE (n:Part {name: {name},title: {title}})",
                parameters( "name", "Arthur001", "title", "King001" ));
        StatementResult result = session.run( "MATCH (a:Part) WHERE a.name = {name} " +
                        "RETURN a.name AS name, a.title AS title",
                parameters( "name", "Arthur001"));
        while (result.hasNext()) {
            Record record = result.next();
            System.out.println( record.get( "title" ).asString() + "" + record.get( "name" ).asString() );
        }
        session.close();
        driver.close();
    }
}

这是一种比较古老的方式,来实现的,而且还是需要些 CQL 语句来进行实现。但是胜在非常好理解,这个时候,我们需要再来看看图,看看在 Neo4J 中他是怎么展现的。


86.jpg

通过这个,我们至少证明我们成功连上了,并且创建也成功了。

这时候有细心的读者就会问,为啥我之前在 GraphDatabase.driver 的地方,连接的是

bolt://localhost:7687.

这是因为,你启动的Neo4J 是7474,也就是说,Neo4J 服务里面可不是这个来连接,

87.jpg

SpringBoot 整合 Neo4j

1.创建SpringBoot项目

常规的创建SpringBoot项目,

88.jpg

创建完成之后,习惯性的要改一下 SpringBoot 的版本号,最好别用最新的,因为阿粉亲身经历,使用最新版的,出现了错误你都不知道怎么出现的,就是这么神奇,你永远都发现不了的bug。

我们把版本号改成2.1.0,这样的话,我们在 pom 文件中加入依赖 jar

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
<dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 <version>1.16.10</version>
</dependency>

2.增加配置

spring:
  data:
    neo4j:
      url: bolt://localhost:7687
      username: neo4j
      password: Yinlidong1995.
  main:
    allow-bean-definition-overriding: true

3.Neo4JConfig

package com.example.neo4j.config;
import org.neo4j.driver.v1.AuthTokens;
import org.neo4j.driver.v1.Driver;
import org.neo4j.driver.v1.GraphDatabase;
import org.neo4j.driver.v1.Session;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableNeo4jRepositories("com.example.neo4j.repository")
@EnableTransactionManagement
public class Neo4jConfig {
    @Value("${spring.data.neo4j.url}")
    private String url;
    @Value("${spring.data.neo4j.username}")
    private String userName;
    @Value("${spring.data.neo4j.password}")
    private String password;
    @Bean(name = "session")
    public Session neo4jSession() {
        Driver driver = GraphDatabase.driver(url, AuthTokens.basic(userName, password));
        return driver.session();
    }
}

4.编写实体类

package com.example.neo4j.entry;
import org.neo4j.ogm.annotation.*;
import java.util.HashSet;
import java.util.Set;
@NodeEntity("group")
@Data
public class GroupNode {
    @Id
    @GeneratedValue
    private Long id;
    /**
     * 班级名称
     */
    @Property(name = "name")
    private String name;
    /**
     * 编号
     */
    private String num;
    @Relationship(type = "RelationEdge")
    private Set<RelationEdge> sets = new HashSet<>();
    public void addRelation(StudentNode sonNode, String name) {
        RelationEdge relationNode = new RelationEdge(this, sonNode, name);
        sets.add(relationNode);
        sonNode.getSets().add(relationNode);
    }
}

学生实体类:

package com.example.neo4j.entry;
import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;
import java.util.HashSet;
import java.util.Set;
/**
 * 有点类似于Mysql中的table 映射的对象类,mysql中叫做ORM,neo4j中叫做OGM [object graph mapping]
 */
@NodeEntity("student")
@Data
public class StudentNode {
    @Id
    @GeneratedValue
    private Long id;
    /**
     * 学生名称
     */
    private String name;
    /**
     * 性别
     */
    private String sex;
    @Relationship(type = "RelationEdge", direction = "INCOMING")
    private Set<RelationEdge> sets = new HashSet<>();
}
package com.example.neo4j.entry;
import lombok.Data;
import org.neo4j.ogm.annotation.*;
@RelationshipEntity(type = "RelationEdge")
@Data
public class RelationEdge {
    @Id
    @GeneratedValue
    private Long id;
    // 关系名
    private String name;
    @StartNode
    private GroupNode groupNode;
    @EndNode
    private StudentNode studentNode;
    public RelationEdge(GroupNode parentNode, StudentNode sonNode, String name) {
        this.groupNode = parentNode;
        this.studentNode = sonNode;
        this.name = name;
    }
}

5.Repository接口

对应的学生接口:

package com.example.neo4j.repository;
import com.example.neo4j.entry.StudentNode;
import org.springframework.data.neo4j.repository.Neo4jRepository;
public interface StudentRepository extends Neo4jRepository<StudentNode,Long> {
}

对应的班级接口

package com.example.neo4j.repository;
import com.example.neo4j.entry.GroupNode;
import org.springframework.data.neo4j.repository.Neo4jRepository;
public interface GroupRepository extends Neo4jRepository<GroupNode,Long> {
}

最后完成编写我们的 Controller

package com.example.neo4j.controller;
import com.example.neo4j.entry.*;
import com.example.neo4j.repository.GroupRepository;
import com.example.neo4j.repository.StudentRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/node")
@Slf4j
public class GroupController {
    @Autowired
    private StudentRepository studentRepository;
    @Autowired
    private GroupRepository groupRepository;
    @GetMapping(value = "/create")
    public void createNodeRelation() {
        StudentNode studentNode1 = new StudentNode();
        studentNode1.setName("Alen");
        studentNode1.setSex("男");
        StudentNode studentNode2 = new StudentNode();
        studentNode2.setName("Kai");
        studentNode2.setSex("女");
        studentRepository.save(studentNode1);
        studentRepository.save(studentNode2);
        GroupNode groupNode = new GroupNode();
        groupNode.setName("火箭班");
        groupNode.setNum("298");
        // 增加关系
        groupNode.addRelation(studentNode1, "includes");
        groupNode.addRelation(studentNode2, "includes");
        groupRepository.save(groupNode);
    }
}

启动之后,访问http://localhost:8080/node/create

我们再去图谱数据库看看。

89.jpg90.jpg

怎么样,使用Java 操作是不是也是非常简单的呢?这样的图谱数据库你会选择么?


相关文章
|
7天前
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
21 0
|
18天前
|
DataWorks 数据挖掘 调度
DataWorks产品使用合集之如何查看HTTP触发器调用的域名
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
15天前
|
存储 缓存 Java
滚雪球学Java(59):从基础到高阶:Java中LinkedList的操作指南
【6月更文挑战第13天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
12 1
滚雪球学Java(59):从基础到高阶:Java中LinkedList的操作指南
|
2天前
|
Java
使用kafka-clients操作数据(java)
使用kafka-clients操作数据(java)
13 6
|
4天前
|
安全 Java 程序员
在Java中,finalization是一种机制,允许对象在被垃圾收集器回收之前执行一些清理操作。
【6月更文挑战第24天】Java中的finalization机制允许对象在被垃圾收集前执行清理,以释放系统资源或处理敏感信息。`finalize()`方法用于定义此类操作,但它不是可靠的资源管理策略,因为调用时机不确定且可能影响性能。尽管可用于清理外部资源或作为保护措施,但应避免依赖finalization,而应优先采用手动资源管理,遵循“创建者负责”原则。
8 1
|
9天前
|
Java
在Java中,你可以创建一个简单的四则运算程序来执行小学级别的加减乘除操作
【6月更文挑战第19天】Java程序实现简单四则运算,接收用户输入的两个数字和运算符,根据运算符调用相应函数进行计算。包含加、减、乘、除功能,其中除法操作检查了除数是否为零,避免运行时错误。
23 5
|
7天前
|
Java 索引
从干将莫邪的故事说起--java比较操作注意要点
从干将莫邪的故事说起--java比较操作注意要点
|
8天前
|
NoSQL Java Redis
如何在 Java 中操作这些 Redis 数据结构的基本方法
如何在 Java 中操作这些 Redis 数据结构的基本方法
11 2
|
9天前
|
Java API
使用 Java 来实现两个 List 的差集操作
使用 Java 来实现两个 List 的差集操作
14 3
|
9天前
|
算法 搜索推荐 Java
二叉树的基本概念、常见操作以及如何使用Java代码
二叉树的基本概念、常见操作以及如何使用Java代码
10 1