当前位置: 首页 > article >正文

【java-Neo4j 5开发入门篇】-最新Java开发Neo4j

系列文章目录


前言

上一篇文章讲解了Neo4j的基本使用,本篇文章对Java操作Neo4j进行入门级别的阐述,方便读者快速上手对Neo4j的开发。


一、开发环境与代码

1.docker 部署Neo4j

#这里使用docker部署Neo4j,需要镜像加速的需要自行配置
docker run --name neo4j -itd -p 7474:7474 -p 7687:7687 -v ./data:/data neo4j:5.25.1-community

二、开发代码

1.原生Java开发

  • 官方给出了Java开发Neo4j的官方教程地址:Neo4j-java官方文档
    在这里插入图片描述
  • Github的样例代码库地址:Github样例库地址
    在这里插入图片描述
    上述文档教程和代码样例可以快速帮你了解如何使用java对Neo4j进行操作。下面我们聊一下使用Springboot3框架对Neo4j的开发。

2.SpringBoot3开发

这里以我写的一个demo案例进行阐述,该demo主要帮大家入门,自定义方法需要自己研究或等我后面更新。。

  • 项目目录结构
    在这里插入图片描述
  • pom依赖
    jdk21,springboot3.3.5
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.develop</groupId>
    <artifactId>neo4j-java</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>neo4j-java</name>
    <description>neo4j-java</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>21</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--连接 neo4j,版本要对应数据库-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

  • yml配置
spring:
  application:
    name: neo4j-java
  neo4j:
    uri: bolt://localhost:7687
    authentication:
      username: neo4j
      password: 123456
  data:
    neo4j:
      database: neo4j
logging:
  level:
    org.neo4j.ogm.drivers.bolt.request.BoltRequest: DEBUG
    org.neo4j.driver: INFO
  • 实体(节点)类
package com.develop.neo4jjava.domain;

import lombok.Data;
import org.springframework.data.neo4j.core.schema.GeneratedValue;
import org.springframework.data.neo4j.core.schema.Id;
import org.springframework.data.neo4j.core.schema.Node;

/**
 * @author wanChen
 * @ClassName Person
 * @Description:
 * @date 2024/11/18 17:23
 * @Version 1.0
 */
@Node
@Data
public class Person {

    @Id
    @GeneratedValue
    private Long id;
    private String name;
    private int born;

}

  • 继承工厂接口
package com.develop.neo4jjava.domain.repository;

import com.develop.neo4jjava.domain.Person;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author wanChen
 * @ClassName PersonRepository
 * @Description:
 * @date 2024/11/18 17:24
 * @Version 1.0
 */

@Repository
public interface PersonRepository extends Neo4jRepository<Person, Long>{

    //自定义根据name查询
    List<Person> findByName(String name);

    //自定义修改方法,实现类需要先根据name查出数据(id)再进行修改
    Person updateByKey(String name);
}
  • 创建工具类
package com.develop.neo4jjava.utils;
import com.develop.neo4jjava.domain.Person;
import com.develop.neo4jjava.domain.repository.PersonRepository;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
/**
 * @author wanChen
 * @ClassName Neo4jUtil
 * @Description:
 * @date 2024/11/18 17:26
 * @Version 1.0
 */


@Component
public class Neo4jUtil {

    @Resource
    private PersonRepository personRepository;

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

    public Iterable<Person> getAllPersons() {
        return personRepository.findAll();
    }

    public Person getPersonById(Long id) {
        return personRepository.findById(id).orElse(null);
    }

    public void deletePerson(Long id) {
        personRepository.deleteById(id);
    }

}

  • 代码测试
package com.develop.neo4jjava;

import com.develop.neo4jjava.domain.Person;
import com.develop.neo4jjava.utils.Neo4jUtil;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class Neo4jJavaApplicationTests {

    @Autowired
    private Neo4jUtil neo4jUtil;
    @Test
    void addNode() {
        Person person = new Person();
        person.setBorn(2001);
        person.setName("张三");
        System.out.println(neo4jUtil.createPerson(person));
    }

    @Test
    void getAllNode(){
        System.out.println(neo4jUtil.getAllPersons());
    }

    @Test
    void deleteNode(){
        neo4jUtil.deletePerson(71L);
    }

    @Test
    void getNodeById(){
        System.out.println(neo4jUtil.getPersonById(1L));
    }
}

三、可视化

引用其他博主对可视化的收集:Neo4j可视化工具

四、总结

本文主要以代码demo的方式进行阐述,后续的工作主要是涉及基于Neo4j做一些知识图谱,并且结合ES做全文检索的应用场景。等设计方案过一段落后,会再和大家继续探究Neo4j的使用。


http://www.kler.cn/a/406292.html

相关文章:

  • Jvm知识点
  • ubuntu20.04的arduino+MU编辑器安装教程
  • HBase Java基础操作
  • JAVA后端如何调用百度的身份证识别API
  • 《C++ 实现区块链:区块时间戳的存储与验证机制解析》
  • 移动充储机器人“小奥”的多场景应用(上)
  • 《OpenCV 图像缩放、翻转与变换全攻略:从基础操作到高级应用实战》
  • 考虑楼宇空间布局的电力系统集群规划策略【集群划分】
  • 【课堂笔记】隐私计算实训营第四期:“隐语”可信隐私计算开源框架
  • 国外地区经纬度查询免费API接口教程
  • 【深入学习大模型之:微调 GPT 使其自动生成测试用例及自动化用例】
  • Android Compose实现一个文字跑马灯效果控件
  • D76【 python 接口自动化学习】- python 基础之 HTTP
  • 漫步北京小程序构建智慧出行,打造旅游新业态模式
  • box-sizing
  • 了解Redis(第一篇)
  • Ubuntu20.04下安装向日葵
  • 更高效的Java 23开发,IntelliJ IDEA助力全面升级
  • unity中:超低入门级显卡、集显(功耗30W以下)运行unity URP管线输出的webgl程序有那些地方可以大幅优化帧率
  • # issue 4 进程控制函数
  • Leetcode 每日一题 392.判断子序列
  • 前端图像处理(一)
  • webview4/edgewebbrower学习记录——执行js
  • 三层交换机静态路由实验
  • ETCD调优
  • 计算机网络基础全攻略:探秘网络构建块(1/10)