SpringBoot 整合 Neo4j 实战(头歌)

文章目录

  • 第1关:认识 Spring DATA Neo4J
    • 任务描述
    • 相关知识
      • Spring DATA Neo4J - 简介
        • Spring JDBC / Spring ORM 模块的缺点:
        • Spring 数据模块的优点:
        • Spring 数据模块功能:
        • Spring DATA Neo4j 模块的附加功能:
      • Spring DATA Neo4j - 结构
        • Spring DATA Neo4j 模块
        • Spring DATA Neo4j 架构
        • Spring DATA Neo4j 存储库
    • 本关要求
    • 测试说明
    • 题目答案
  • 第2关:Spring DATA Neo4J
    • 任务描述
    • 相关知识
      • Spring DATA Neo4J 环境
      • Spring DATA Neo4j 示例
        • Spring DATA Neo4j 模块注释
        • Entity 实体类模块
        • 开发 Spring DATA Neo4j 存储库
    • 编程要求
    • 测试说明
    • 答案
      • `PersonRepository.java`
      • `testController.java`
      • `Person.java`
      • `application.properties`
    • 注解

第1关:认识 Spring DATA Neo4J

任务描述

本关任务:了解关于 Neo4j 在 SpringBoot 中的关系和联系。

相关知识

为了完成本关任务,你需要掌握: 1.Spring DATA Neo4J - 简介; 2.Spring DATA Neo4J - 结构。

Spring DATA Neo4J - 简介

Spring是开源框架,很容易开发基于企业 Java 的应用程序。 它用Java语言编写。

Spring Framework 提供了以下模块来处理基于 Java 的应用程序的 DAO 层:

  • Spring JDBC
  • Spring ORM
  • Spring DATA

如果我们观察任何基于 Java 的 n 层应用程序,我们通常会找到以下层。

img

层次结构

这里DAO(数据访问对象)层负责实现数据库操作。

我们需要为每个实体(Say one Database Table)实现两套工件。

例如:

如果我们在我们的数据库中有一个PROFILE表,那么我们需要提供一个 Profile Entity 类(POJO)。 然后我们需要提供一个 DAO 接口和一个 DAO 实现类。

这里我们需要选择 Spring JDBC 或 Spring ORM 来实现这些工件。

img

选择类

Spring JDBC / Spring ORM 模块的缺点:
  • 大量的 boiler plate 代码来执行简单的数据库操作;
  • 增加了大量 DAO 层工件的维护;
  • 增加实现大量 DAO 图构件的开发时间。
Spring 数据模块的优点:
  • 消除 DAO 层中的 boiler plate 代码;
  • DAO 层中的工件少;
  • 易于开发和维护;
  • 改进开发过程。
Spring 数据模块功能:
  • 支持基于XML的实体映射;
  • 支持基于注释的实体映射;
  • 支持分页;
  • 支持事务;
  • 更少的 DAO 层工件-实现存储库;
  • Spring DATA Neo4j 模块具有与上述相同的优点和特点。
Spring DATA Neo4j 模块的附加功能:
  • 支持Neo4j属性图模块;
  • 支持Neo4j Lucence索引;
  • 支持Neo4j CQL;
  • Neo4jTemplate。

Spring DATA Neo4j - 结构

Spring DATA Neo4j 模块

Spring DATA 模块适用于为各种数据库实现 DAO 层。 它通过避免一些不需要的工件(DAO 实现)来改进应用程序开发过程。

关系数据库(Oracle,MySQL 等等)。 没有 SQL 数据库(MongoDB,Redis,Apache Cassandra 等) 无 SQL 图形数据库(Neo4j 等)。 在本实训中,我们将讨论 Spring DATA Neo4j 模块架构。 这个架构几乎类似于上面提到的所有类型的数据库。 它仅在几个组件名称不同。

Spring DATA Neo4j 架构

在开始 Spring DATA Neo4j 开发之前,首先我们将了解这个模块的架构。

下图显示了Spring DATA Neo4j 模块的体系结构。

,

Spring DATA Neo4j 存储库

它提供了不同的 API 来支持不同的场景。

  • GraphRepository:它用于执行 Basic Neo4j DB 操作。
  • GraphTemplate:像其他模块一样,它是执行 Neo4j DB 操作的 Spring 模板。
  • CrudRepository:它用于使用 Cypher 查询语言(CQL)执行 Neo4j CRUD 操作。
  • PaginationAndSortingRepository:它用于执行 Neo4j CQL 查询结果的分页和排序。 这些是 Java 类。 每个具有执行 Neo4j 数据库操作的特定目的。

Neo4j 驱动程序:当我们使用 Spring DATA Neo4j 模块 API 来执行一些数据库操作时,Spring DATA Neo4j Jars 在内部使用这些驱动程序 Jars 来交互和执行 Neo4j 数据库操作。

本关要求

根据相关知识完成右侧选择题。

测试说明

若选择题答案与正确答案一致则可通关。

题目答案

1、下面属于 Spring JDBC 模块的缺点的是:C
A、少量的 boiler plate 代码来执行简单的数据库操作
B、减少了大量 DAO 层工件的维护
C、增加实现大量 DAO 图构件的开发时间
D、DAO 层中的工件少2、下面属于 Spring 数据模块的优点是:ABCD
A、消除 DAO 层中的 boiler plate 代码
B、DAO 层中的工件少
C、易于开发和维护
D、改进开发过程3、Spring DATA Neo4j 存储库 提供了哪些不同的 API 来支持不同的场景。ABCD
A、GraphRepository
B、GraphTemplate
C、CrudRepository
D、PaginationAndSortingRepository4、Spring 是▁▁▁框架,很容易开发基于企业 Java 的应用程序。
填空1答案:开源5、Spring DATA 模块仅适用于为 Neo4j 数据库实现 DAO 层。
错误

第2关:Spring DATA Neo4J

任务描述

本关任务:基于 SpringBoot 查询 Neo4j 中的信息。

相关知识

为了完成本关任务,你需要掌握:

  1. Spring DATA Neo4J 环境;
  2. Spring DATA Neo4j 示例。

Spring DATA Neo4J 环境

在 Pom 文件中添加需要的依赖。

Spring DATA Neo4j 模块 Jar 文件:

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-neo4j</artifactId></dependency>

这个依赖是最重要的,里面包含了 Neo4j 所需的所有 Jar 文件。

基于 SpringBoot 所需要的完整 pom 文件为:

    <properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.3.7.RELEASE</spring-boot.version></properties><dependencies><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><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

配置 :

# 连接的 Neo4j 数据库地址
spring.data.neo4j.uri= bolt://localhost:11002
# username
spring.data.neo4j.username=neo4j
# password
spring.data.neo4j.password=123456

Spring DATA Neo4j 示例

Spring DATA Neo4j 模块注释

我们将使用以下 Spring Framework 注释来开发此应用程序。

Spring DATA Neo4j 注解用法
@GraphEntity定义域类Neo4j Entity
@GraphID定义节点或关系id
@GraphProperty定义节点或关系属性

实现 Spring DATA Neo4j 应用程序的简要步骤:

  • 开发图表实体或域或 POJO 类;
  • 开发 DAO 或存储库;
  • 开发服务层(如果需要);
  • Spring DATA Neo4j XML 配置。
Entity 实体类模块

需要创建一个 entity 包,存放实体类。 在包下创建一个实体类 Person 类:

import lombok.Data;
import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Property;
import java.io.Serializable;
@Data
// 设置节点标签
@NodeEntity(label = "person")
// 序列化
public class Person implements Serializable {// 自动生成 id@Id@GeneratedValueprivate Long id;// 设置属性@Propertyprivate String name;
}

关键注释:

  • @Data:自动创建 GetSet 方法;
  • @NodeEntity(label = "person"):设置节点实体的标签;
  • @Id、@GeneratedValue:自动生成节点 id;
  • @Property:设置节点属性。
开发 Spring DATA Neo4j 存储库

Spring DATA Neo4j 将在内部为此接口提供实现。 为我们的 Person 类定义一个存储库或 DAO 接口:PersonRepository,接口需要继承 Neo4jRepository<T,ID>接口。(T 为你要传入的实体类) PersonRepository:

public interface PersonRepository extends Neo4jRepository<Person,Long> {}

创建完后我们就可以直接对 PersonRepository 接口进行实例化,直接调用,我们所需要的方法即可。 可以实现的数据库操作为:

  • 增:save(Entity)

    // 创建实体类
    Person person = new Person();
    // 设置实体类属性
    person.setName("玉皇大帝");
    // 使用接口创建节点
    personRepository.save(person);
    
  • 删:deleteAll()deleteByID()delete() deleteAll():删除所有节点; deleteByID(id):传入所需要删除节点的 Id,即可删除其节点; delete(entity):传入一个实体类,即可删除与这个实体类相同的属性的节点。

  • 查:findAll()findById() findById(id):通过节点的 Id 对节点进行查询; findAll():查询所有节点暑假。、; findAll(int i):查询关系深度; findAll(Sort sort):选择排序方式进行查询所有节点信息。

  • 改:可以通过结合前面三中方法进行操作。

编程要求

根据提示,在右侧编辑器补充代码, 完成四个文件代码文件的内容补充:PersonRepository.javatestController.javaPerson.javaapplication.properties

  1. 创建 Person 类:属性为 name:演员姓名、born:出生年份,节点标签为:person

  2. 配置 Neo4j 数据库连接配置;Neo4j 数据库的端口号为:7687

  3. 使用接口和实体类进行创建节点,创建 3 个节点节点属性如下:

    born,name
    1996,汤姆-赫兰德
    1998,赵露思
    2001,张子枫
    1999,吴磊
    

测试说明

平台会对你编写的代码进行测试:

测试输入:; 预期输出:

创建成功
n
(:person {name: "汤姆-赫兰德", born: "1996"})
(:person {name: "赵露思", born: "1998"})
(:person {name: "张子枫", born: "2001"})
(:person {name: "吴磊", born: "1999"})

答案

PersonRepository.java

package com.example.comstartneo4j.dao;import com.example.comstartneo4j.entity.Person;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.stereotype.Repository;
/********** Begin **********/
@Repository
public interface PersonRepository extends Neo4jRepository<Person, Long> {}
/********** End **********/

testController.java

package com.example.comstartneo4j.controller;import com.example.comstartneo4j.dao.PersonRelationshipRepository;
import com.example.comstartneo4j.dao.PersonRepository;
import com.example.comstartneo4j.entity.Person;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import java.util.Optional;@RestController
public class testController {/********** Begin **********/@Resourceprivate PersonRepository personRepository;@GetMapping("create")public String create() {// 创建实体类,并设置实体类属性Person proson1 = new Person("汤姆-赫兰德", "1996");Person proson2 = new Person("赵露思", "1998");Person proson3 = new Person("张子枫", "2001");Person proson4 = new Person("吴磊", "1999");// 使用接口创建节点personRepository.save(proson1);personRepository.save(proson2);personRepository.save(proson3);personRepository.save(proson4);return "创建成功\n";}/********** End **********/
}

Person.java

package com.example.comstartneo4j.entity;import lombok.Data;
import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Property;import java.io.Serializable;
/********** Begin **********/
@Data
// 设置节点标签
@NodeEntity(label = "person")
// 序列化
public class Person implements Serializable {// 自动生成 id@Id@GeneratedValueprivate Long id;// 设置属性@Propertyprivate String name;private String born;public Person(String name, String born) {this.name = name;this.born = born;}
}
/********** End **********/

application.properties

# 应用名称
spring.application.name=com.start.neo4j
# 应用服务 WEB 访问端口
server.port=8081# neo4j配置信息
/********** Begin **********/
# 连接的 Neo4j 数据库地址
spring.data.neo4j.uri=bolt://localhost:7687
# username
spring.data.neo4j.username=neo4j
# password
spring.data.neo4j.password=123456
/********** End **********/

注解

下述定义注解如果使用 @Autowired 会报错

@Resource
private PersonRepository personRepository;

可能是因为 Spring 框架没有可注入的 PersonRepository Bean。在使用 @Resource 注解时,Spring 会尝试找到与所注入 Bean 的名字相匹配的 Bean。如果找不到匹配的 Bean, @Resource 注解会容忍这个缺失,而不会抛出异常。然而,@Autowired 注解需要找到精确匹配的 Bean,否则会抛出异常("Bean"是指 Spring 容器中的对象实例)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/187494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gromacs学习及使用(2)

命令解释参考GROMACS基本教程 整个流程参考分子动力学模拟Gromacs一般使用步骤&#xff08;空蛋白&#xff09; 从gromacs 5.0版本开始&#xff0c;所有的工具都是“gmx”的子模块。可以通过下面的命令获得任何一个模块的帮助信息&#xff1a; gmx help (module) 或者 gmx (mo…

视频剪辑合并:批量处理视频,高效快捷,添加背景音乐更添魅力

随着数字媒体的普及&#xff0c;视频已成为生活中不可或缺的一部分。无论是记录生活、分享经验&#xff0c;还是传递信息&#xff0c;视频都以其独特的魅力占据了重要的地位。而在这个快节奏的时代&#xff0c;如何高效地处理视频&#xff0c;以及如何通过添加背景音乐来提升视…

服务器安装JDK17 版本显示JDK8

服务器之前安装的是JDK8&#xff0c;后面升级JDK17后&#xff0c;发现执行 java -vsrsion 显示的是此时我的环境变量已经换成了JAVA17的路径 输入&#xff1a; vim /etc/profile 解决办法&#xff1a; 1.更新自己环境变量 bash export JAVA_HOME/usr/local/jdk-17.0.7 …

Anemone库的爬虫程序代码示例

以下是代码&#xff1a; ruby require anemone # 设置代理服务器 Anemone.proxies { http > "", https > "" } # 定义爬取的URL url # 使用Anemone进行爬取 Anemone.crawl(url) do |page| # 使用正则表达式找出所有的视频链接 video_…

windows 查看mysql的错误日志

查找错误日志文件存储路径 用到的软件&#xff1a;everything 官网 voidtools 下载路径 https://www.voidtools.com/Everything-1.4.1.1024.x64-Setup.exe 直接点击下载即可 运行效果如下 我们知道mysql有个配置文件是my.ini&#xff0c;里面配置了相关信息 我们需要先…

elasticsearch操作

目录 一、mapping映射属性二、索引库的CRUD2.1 创建索引库和映射2.2 查询索引库2.3 修改索引库2.4 删除索引库2.5 总结 三、文档操作3.1 新增文档3.2 查询文档3.3 删除文档3.4 修改文档3.5 总结 四、RestClient操作索引库4.1 初始化RestClient4.2 创建索引库4.3 删除索引库4.4 …

Vue3-数据交互请求工具设计

1.安装axios pnpm add axios 2.利用axios.create创建一个自定义的axios来使用 参考官网&#xff1a;axios中文文档|axios中文网 | axios 在src/utils文件夹下新建request.js&#xff0c;封装axios模块 import axios from axios const baseURL const instance axios.creat…

如何查看电脑内存?Windows 和 Mac 方法不同

Windows 系统查看内存方法 在 Windows 操作系统中我们查看电脑内存在哪里查呢&#xff1f;下面总结的 3 种查看电脑内存的方法都可以使用&#xff1a;使用任务管理器&#xff1a;任务管理器是 Windows 中一个强大的工具&#xff0c;可用于监视和管理计算机的性能和资源使用。使…

Adobe InCopy の Adobe InDesign 大联动

今天我们再来进行Adobe全家桶剩余几位的介绍~ Adobe InCopy是一款专业的文字编辑和校对软件&#xff0c;它是InDesign的附属软件&#xff0c;主要用于编辑、校对和协作文本内容。InCopy提供了一系列功能&#xff0c;使得编辑和校对文本变得更加简单和高效。在InCopy中&#xff…

2023 BUCT 计算方法实验报告

前言 Textlive版本&#xff1a;2023 textstudio版本&#xff1a;4.6.3 名字和日期在以下地方修改: 图片下载地址; figures.zip LiangCha_Xyy/Source - Gitee.com 如下图&#xff0c;.tex文件和figures文件夹放在同一路径下即可 .tex代码 \documentclass[UTF8]{ctexart} \usep…

Electron+Ts+Vue+Vite桌面应用系列:sqlite增删改查操作篇

文章目录 1️⃣ sqlite应用1.1 sqlite数据结构1.2 初始化数据库1.3 初始化实体类1.4 操作数据类1.5 页面调用 优质资源分享 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134692751 ElectronTsVueVite桌面应用系列 &am…

C++学习专栏【基础知识2】C++数据类型

1、内置数据类型 基本内置类型 C为程序员提供了丰富的内置数据类型以及用户自定义数据类型。以下表格列出了七种基本的 C 数据类型 - 类型关键字布尔值bool字符char整数int浮点数float双精度浮点数double无值void宽字符wchar_t 基本类型中的几种可以使用一个或多个类型修饰符…

Kubernetes 安全最佳实践:保护您的秘密

Kubernetes 是一个可用于微服务的开源容器编排平台。当我们想要部署容器化应用程序、自动化管理和扩展应用程序时&#xff0c;Kubernetes 非常有用。 在容器中运行单个微服务而不是在同一虚拟机中运行多个进程几乎总是更安全。每当我们在 Kubernetes 中启动任何 pod 时&#x…

键盘敲入一个字母,操作系统发生了什么?

一、设备控制器 我们的电脑设备可以接非常多的输入输出设备&#xff0c;比如鼠标键盘网卡硬盘打印机等&#xff0c;每个设备的用法和功能都不相同&#xff0c;那操作系统是如何把这些输入输出设备统一管理的呢&#xff1f; 为了屏蔽设备之间的差异&#xff0c;每个设备都有一…

Zookeeper从零入门笔记

Zookeeper从零入门笔记 一、入门1. 概述2. 特点3. 数据结构4. 应用场景 二、本地1.安装2. 参数解读 三、集群操作3.1.1 集群安装3.2 选举机制1. 第一次启动2. 非第一次启动 3.3 ZK集群启动停止脚本3.4 客户端命令行操作3.2.1 命令行语法3.2.2 节点类型&#xff08;持久/短暂/有…

六:Day01_Spring Boot01

一、Spring Boot简介 1. 概念简介 Spring Boot是Spring公司的一个顶级项目&#xff0c;和Spring Framework是一个级别的。 Spring Boot实际上是利用Spring Framework 4 自动配置特性完成。编写项目时不需要编写xml文件。 2. 启动器介绍 Spring Boot的启动器实际上就是一个依赖…

热部署怎么部署

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言操作流程&#xff1a;在这里插入图片描述 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a832d83c091742eda9d9325931a89df4.png) 这里的跟上面的…

WPF实战项目十九(客户端):修改RestSharp的引用

修改HttpRestClient&#xff0c;更新RestSharp到110.2.0&#xff0c;因为106版本和110版本的代码不一样&#xff0c;所以需要修改下代码 using Newtonsoft.Json; using RestSharp; using System; using System.Threading.Tasks; using WPFProjectShared;namespace WPFProject.S…

算法通关村第十八关青铜挑战——透析回溯的模板

大家好&#xff0c;我是怒码少年小码。 回溯是最重要的算法思想之一&#xff0c;主要解决一些暴力枚举也搞不定的问题&#xff08;组合、子集、分割、排列、棋盘等等&#xff09;。性能并不高&#xff0c;但是哪些暴力枚举都无法ko的问题能解出来就可以了&#x1f923;。 这一…

BUUCTF [GXYCTF2019]BabySQli 1 详解!(MD5与SQL之间的碰撞)

题目环境burp抓包 随便输入值 repeater放包 在注释那里发现某种编码 MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5 看着像是base编码格式 通过测试发现是套加密&#xff08;二次加密&#xff09; 首先使用base32对此编码…