neo4j入门

article/2025/9/14 23:38:57

目录

一、安装

二、CQL使用

三、Springboot(2.4以上版本)整合neo4j 

四、使用过程中的问题

1、自定义查询,cql无法接收变量

2、使用依赖去操作neo4j只有return才会执行

3、neo4j和mysql事务冲突

补充


一、安装

1、首先要配置jdk,默认电脑中有jdk

2、访问neo4j官网选择需要的版本进行下载,一般选择社区版就可以

Neo4j Download Center - Neo4j Graph Data Platform

 3、下载后的压缩包解压到想要路径(路径不要有中文)

 4、启动neo4j

在命令行中切换到安装目录的bin目录下,输入命令 ./neo4j start

 启动完就可以在浏览器中输入,会出现以下登录页面,初始密码都是neo4j,然后会引导修改密码

二、CQL使用

1、创建节点

语法:create (别名:节点名 {属性名:属性值})

create (n:`西游记` {name:'菩提老祖'})

2、创建关系

语法:CREATE (别名:节点名 {属性名:属性值})-[别名:关系名]->(别名:节点名 {属性名:属性值})

CREATE (n:`西游记` {name:'孙悟空'})-[r:师傅]->(m:`西游记` {name:'菩提老祖'})

2.1、从已有节点创建关系:先查到节点再创建关系

MATCH (n:`西游记` {name:"孙悟空"}),(m:`西游记` {name:"牛魔王"}) create (n)-[r:`义兄`]->(m)

3、查询节点

MATCH (n:`西游记` {name:"孙悟空"}) return n

也可以使用where条件 MATCH (n:`西游记`) WHERE n.name="孙悟空" RETURN n

4、set属性赋值

MATCH (n:`西游记` {name:"孙悟空"}) set n.skill='七十二变' return n

5、删除节点

语法:MATCH (别名:节点名 {属性名:属性值}) delete 别名(先找到节点再删除)

MATCH (n:`西游记` {name:"菩提老祖"}) delete n

直接删除节点会报错,因为这个节点存在关系,需要先删除关系

5.1、删除关系

MATCH (n:`西游记` {name:"菩提老祖"})<-[r]-(m) delete r

6、其他关键字ORDER BY、UNION、UNION ALL、IN、LIMIT、DISTINCT 等与mysql使用一样

6.1、in查询

注:in查询的元素是用中括号[ ]包括

MATCH (n:`西游记`) WHERE id(n) IN [1,2] RETURN n

7、索引

7.1、创建索引

7.2、删除索引

7.3、UNIQUE唯一约束

上面创建了唯一约束,再创建存在的节点就会报错

删除唯一约束

8、数据库备份

8.1、关闭neo4j

./neo4j stop

8.2、备份(备份文件夹需要存在)

./neo4j-admin dump --database "neo4j" --to=/Users/elroyelroy/soft/neo4j-community-4.4.15/backup/graph_backup.dump

8.3恢复

./neo4j-admin load --from=/Users/elroyelroy/soft/neo4j-community-4.4.15/backup/graph_backup.dump

--database "neo4j" --force

三、Springboot(2.4以上版本)整合neo4j 

1、yml配置文件添加配置

spring:neo4j:uri: bolt://localhost:7687authentication:username: neo4jpassword: 123456data:neo4j:database: neo4j

2、pom文件引入依赖

        <!-- neo4j 驱动 --><dependency><groupId>org.neo4j.driver</groupId><artifactId>neo4j-java-driver</artifactId></dependency><!-- neo4j 操作实体注解需要 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-neo4j</artifactId></dependency>

3、创建实体类和dao层

3.1、创建实体类

@Node("Star"):这个注解表示节点的名称
@Id @GeneratedValue:id自动生成策略
@Data
@NoArgsConstructor
@AllArgsConstructor
@Node("Star")
public class Star implements Serializable {private static final long serialVersionUID = 1L;@Id@GeneratedValueprivate Long id;private String name;
}

3.2、创建Repository

这边需要继承ReactiveNeo4jRepository 来操作neo4j

@Repository
public interface StarRepository extends ReactiveNeo4jRepository<Star, Long> {}

3.3、测试

注:return的值如果一个对象要用Mono<>返回,如果是个列表用Flux<>返回

    @Resourceprivate StarRepository starRepository;@GetMapping("/all")public Flux<Star> all() {return starRepository.findAll();}@GetMapping("/add")public Mono<Star> add() {Star star = new Star();
//        Star.setId(1); // 修改时设置id就会修改对应id下面的值star.setName("蔡徐坤");return starRepository.save(star);}@GetMapping("/delete")public Mono<Void> delete() {return starRepository.deleteAll();}

四、使用过程中的问题

1、自定义查询,cql无法接收变量

使用@Query注解传入cql语句

这里接收动态参数时,网上找了很多种方式,{name},{0},$name,$0 等都会报错,自己测试是加个@Param 注解配合$ 才可以接收传进来的参数

    @Query("MATCH (n:Star{name:$name}) RETURN m")Mono<Star> findStarByName(@Param("name") String name);

2、使用依赖去操作neo4j只有return才会执行

在进行neo4j操作时,对数据库的增删改查操作都必须放在return行才会执行,这样会导致我们有些业务操作,或者多个节点操作无法在一个方法里面实现。

解决办法:

1)使用block()方法

在操作的最后调用.block()方法,会立即提交这个事务,并且返回这个对象的信息。

 list操作是blockFirst()和blockLast()。

这里list的操作也会全部提交执行,但是它只会返回第一个对象或者最后一个对象,如果只是想提交这个操作可以使用,如果有业务需要对提交后的列表信息进行操作这边就不建议使用。

2)Neo4jTemplate的使用

引入Neo4jTemplate,这边的操作就跟mybatisplus的操作无异,直接进行保存,并且保存后这个对象就会有保存后生成后的id等信息。

要注意的是,neo4jTemplate的返回值都是我们所操作的对象和List,这样使得我们在进行业务操作的时候更顺手,对比Mono<>和Flux<>简直不要太友好,从这一点来说,个人还是更喜欢使用neo4jTemplate。

3、neo4j和mysql事务冲突

在引入neo4j之后,一些加了@Transactional注解使用mysql事务的方法就会报错,有的甚至可能项目启动就报错了

这是因为在引入了Neo4J依赖库之后,transactionManager就变成了Neo4jTransactionManager,所以就要去修改默认事务。

// 修改默认事务,加载了Neo4J依赖库之后,transactionManager变成Neo4jTransactionManager,不增加此处,启动会报错,Mysql无法使用。@Bean("transactionManager")@Primarypublic DataSourceTransactionManager transactionManager(DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}// neo4j事务@Bean(ReactiveNeo4jRepositoryConfigurationExtension.DEFAULT_TRANSACTION_MANAGER_BEAN_NAME)public ReactiveTransactionManager reactiveTransactionManager(Driver driver,ReactiveDatabaseSelectionProvider databaseNameProvider) {return new ReactiveNeo4jTransactionManager(driver, databaseNameProvider);}

 ​​​​​​

补充

Springboot整合也可以查看官方文档

官方        Spring Data Neo4j

中文翻译 Spring认证中国教育管理中心-Spring Data Neo4j教程一_技能咖的博客-CSDN博客


http://chatgpt.dhexx.cn/article/S4YwGZjF.shtml

相关文章

Neo4j 安装、使用教程

文章目录 一、Neo4j 的安装与配置1、安装JDK2、安装Neo4j3、Neo4j环境变量配置4、启动服务器 二、Neo4j 使用教程 一、Neo4j 的安装与配置 1、安装JDK 由于Neo4j是基于Java的图形数据库&#xff0c;运行Neo4j需要启动JVM进程&#xff0c;因此必须安装JAVA SE的JDK。配置 JDK环…

neo4j新手教程

neo4j新手教程 本文通过一个实际的案例来一步一步使用Cypher来操作Neo4j。 这个案例的节点主要包括专业和课程两类&#xff0c;课程和课程之间有前置、并列等关系&#xff0c;专业和课程之间有包含等关系。 1、&#xff08;可选&#xff09;首先&#xff0c;我们删除数据库中…

微信开发者工具元素快速定位审查元素

一般浏览器里鼠标在元素上右键点击审查元素或检查元素即可快速打开开发者工具并定位到该元素&#xff0c;但在微信开发者工具中不支持&#xff0c; 解决方法 点击 elements左边的 小鼠标 图片&#xff0c;然后在主页面点击元素即可快速定位

代码审查规范(试用版)

目录 1、背景 2、目标 3、流程 4、指定代码审查规范 4.1、命名风格 4.2、常量定义 4.3、代码风格 4.4、注释风格 4.5、控制语句 5、执行代码审查规范 6、开展PR Bash活动 1、背景 2019年已成历史&#xff0c;2020年已经悄然到来。2019年&#xff0c;我们的研发团队经…

sonar代码审查

sonar代码审查 sonarqube简介七个方面检测代码质量sonarqube结构组件集成方式 sonar部署部署须知sonar搭建步骤1.查看本地环境2.查看java环境3.安装mysql4.安装及配置sonar5.启动sonar启动启动遇到的问题 sonar代码扫描一、使用sonar-scanner进行本地扫描二、使用Android studi…

代码审查

代码审查&#xff1a; 一种有效帮助提升代码质量的有效途径。 代码审查3W(what why when)常见的代码审查工具代码审查流程 1.代码审查3W(what why when)&#xff1a; 代码审查&#xff1a;对计算机源代码系统化的审查&#xff0c;常用软件同行评审的方式进行&#xff0c;目…

java 代码审查_代码审查(Code Review)清单

代码审查可以帮助提高代码质量,避免由于代码习惯而造成的 bug。下面列出的这些要点因该可以作为大部分代码审查的指导,如果是 Java 应用的话,这些建议应该被视作最佳实践。 文档 1. Javadoc 应该在每一个类和方法中添加。 2. 如果是修复某个 bug,应该添加 bug ID。 3. 走捷…

静态代码审查

本篇介绍静态代码审查的意义以及如何在Android studio中集成它们。需要注意的是&#xff0c;这些工具不是万能的&#xff0c;虽然它们能高效且全面地执行代码检查工作&#xff0c;但它们并不具备人类的“逻辑思维”优势。也就是说&#xff0c;静态代码审查工具是无法确保程序逻…

代码审查的必要性和最佳实践

目录 代码审查的流程 代码审查的争议 加班要累死了&#xff0c;完成项目都来不及&#xff0c;还做什么代码审查&#xff1f; 代码审查太费时间&#xff0c;改来改去无非是一些格式、注释、命名之类不痛不痒的问题。 团队的习惯和流程就是不做代码审查&#xff0c;大家都是…

如何审查网页元素

如何审查网页元素 对于一个优秀的爬虫工程师而言&#xff0c;要善于发现网页元素的规律&#xff0c;并且能从中提炼出有效的信息。因此&#xff0c;在动手编写爬虫程序前&#xff0c;必须要对网页元素进行审查。本节将讲解如何使用“浏览器”审查网页元素。 浏览器都自带检查…

代码审查(文档整理)

常用的代码审查工具 git/SUBVERSIONGerritUpsource显示代码变更√√√使用源码仓库√√在线代码讨论√√异步审查支持√√使用协议GPLv2/Apache License 2.0Apache License 2.0付费license 代码审查 范根检查法 轻量级的审查流程 结对编程同步代码审查异步代码审查 代码审查需…

代码审查“查”什么?

让我们来谈谈代码审查&#xff08;Code Review&#xff09;。如果花几秒钟去搜索有关内容&#xff0c;你会发现许多论述代码审查好处的文章&#xff08;例如&#xff0c;Jeff Atwood的这篇文章&#xff09;。你还会发现许多介绍如何使用代码审查工具的文档&#xff0c;比如我们…

uniapp的uview2.0框架u--textarea组件无法换行,换行无效问题解决方案

问题描述 在使用uniapp的uview2.0框架u–textarea组件时&#xff0c;想要使u–textarea支持换行输入&#xff0c;但是默认不支持换行输入&#xff0c;各种百度&#xff0c;没有找到解决问题的方案&#xff0c;最后只有查看源码如下 但发现源码没有对属性有过多的处理&#xff…

微信小程序textarea问题总结

微信小程序textarea问题总结 1.textarea多行输入框。该组件是原生组件 2.参考文档中的原生组件说明https://developers.weixin.qq.com/miniprogram/dev/component/native-component.html 原生组件的层级是最高的&#xff0c;所以页面中的其他组件无论设置 z-index 为多少&am…

JavaFX设置TextArea文本内容

本篇主要内容为设置TextArea的内容&#xff0c;涉及的知识面包括如何添加视图和控制层的关联&#xff0c;调用TextArea的方法设置文本内容&#xff0c;不仅实用于TextArea&#xff0c;还可以设置其它如Button&#xff0c;Label&#xff0c;TextField等组件的文本域或者其它属性…

原生div实现textarea

文章导航 为什么要用div实现textarea关键词实现效果源码示例 为什么要用div实现textarea div 实现 textarea 可以实现高度自适应 关键词 contenteditable: true|false 可以将元素内容区域调整为可编辑 实现效果 源码示例 &#x1f383; index.html <!DOCTYPE html>…

html textarea设置只读属性吗,HTML

HTML中的只读属性用于指定textarea元素为只读。如果文本区域为只读&#xff0c;则其内容无法更改&#xff0c;但可以复制并突出显示。这是一个布尔属性。 用法: Contents... 范例1&#xff1a;本示例使用只读属性在仅可读的输入textarea上写入内容。 HTML Textarea readonly A…

让textarea 只读

网上找到几种方案 都试了下 editable"false" readonly"readonly" disabled"disabled" 不知道是不是语法我写错了 但这么写效果是 &#xff08;顺寻代码和图片一致&#xff09; 第二个和第三个都是不能点 不能修改 第一个可以点可以修改

html页面只读,textarea只读 readonly =true;

Java TextArea 只读问题 TextArea ta new TextArea("",10,15,TextArea.SCROLLBARS_VEICAL_ON报啥错啊。 textarea怎么设置为只读 readonly true; C#语言&#xff1a;Listview控件中加了一个textarea&#xff0c;怎么在前台页面将textarea转化服务器控件&#xff0c;…