当前位置:   article > 正文

neo4j入门_neo4j菜鸟教程

neo4j菜鸟教程

目录

一、安装

二、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配置文件添加配置

  1. spring:
  2. neo4j:
  3. uri: bolt://localhost:7687
  4. authentication:
  5. username: neo4j
  6. password: 123456
  7. data:
  8. neo4j:
  9. database: neo4j

2、pom文件引入依赖

  1. <!-- neo4j 驱动 -->
  2. <dependency>
  3. <groupId>org.neo4j.driver</groupId>
  4. <artifactId>neo4j-java-driver</artifactId>
  5. </dependency>
  6. <!-- neo4j 操作实体注解需要 -->
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-data-neo4j</artifactId>
  10. </dependency>

3、创建实体类和dao层

3.1、创建实体类

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

3.2、创建Repository

这边需要继承ReactiveNeo4jRepository 来操作neo4j

  1. @Repository
  2. public interface StarRepository extends ReactiveNeo4jRepository<Star, Long> {
  3. }

3.3、测试

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

  1. @Resource
  2. private StarRepository starRepository;
  3. @GetMapping("/all")
  4. public Flux<Star> all() {
  5. return starRepository.findAll();
  6. }
  7. @GetMapping("/add")
  8. public Mono<Star> add() {
  9. Star star = new Star();
  10. // Star.setId(1); // 修改时设置id就会修改对应id下面的值
  11. star.setName("蔡徐坤");
  12. return starRepository.save(star);
  13. }
  14. @GetMapping("/delete")
  15. public Mono<Void> delete() {
  16. return starRepository.deleteAll();
  17. }

四、使用过程中的问题

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

使用@Query注解传入cql语句

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

  1. @Query("MATCH (n:Star{name:$name}) RETURN m")
  2. 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,所以就要去修改默认事务。

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

 ​​​​​​

补充

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

官方        Spring Data Neo4j

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/491339
推荐阅读
相关标签
  

闽ICP备14008679号