赞
踩
目录
1、首先要配置jdk,默认电脑中有jdk
2、访问neo4j官网选择需要的版本进行下载,一般选择社区版就可以
Neo4j Download Center - Neo4j Graph Data Platform
3、下载后的压缩包解压到想要路径(路径不要有中文)
4、启动neo4j
在命令行中切换到安装目录的bin目录下,输入命令 ./neo4j start
启动完就可以在浏览器中输入,会出现以下登录页面,初始密码都是neo4j,然后会引导修改密码
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
1、yml配置文件添加配置
- spring:
- neo4j:
- uri: bolt://localhost:7687
- authentication:
- username: neo4j
- password: 123456
- data:
- 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
- @GeneratedValue
- private Long id;
-
- private String name;
- }
3.2、创建Repository
这边需要继承ReactiveNeo4jRepository 来操作neo4j
- @Repository
- public interface StarRepository extends ReactiveNeo4jRepository<Star, Long> {
-
- }
3.3、测试
注:return的值如果一个对象要用Mono<>返回,如果是个列表用Flux<>返回
- @Resource
- private 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();
- }
使用@Query注解传入cql语句
这里接收动态参数时,网上找了很多种方式,{name},{0},$name,$0 等都会报错,自己测试是加个@Param 注解配合$ 才可以接收传进来的参数
- @Query("MATCH (n:Star{name:$name}) RETURN m")
- Mono<Star> findStarByName(@Param("name") String name);
在进行neo4j操作时,对数据库的增删改查操作都必须放在return行才会执行,这样会导致我们有些业务操作,或者多个节点操作无法在一个方法里面实现。
解决办法:
1)使用block()方法
在操作的最后调用.block()方法,会立即提交这个事务,并且返回这个对象的信息。
list操作是blockFirst()和blockLast()。
这里list的操作也会全部提交执行,但是它只会返回第一个对象或者最后一个对象,如果只是想提交这个操作可以使用,如果有业务需要对提交后的列表信息进行操作这边就不建议使用。
2)Neo4jTemplate的使用
引入Neo4jTemplate,这边的操作就跟mybatisplus的操作无异,直接进行保存,并且保存后这个对象就会有保存后生成后的id等信息。
要注意的是,neo4jTemplate的返回值都是我们所操作的对象和List,这样使得我们在进行业务操作的时候更顺手,对比Mono<>和Flux<>简直不要太友好,从这一点来说,个人还是更喜欢使用neo4jTemplate。
在引入neo4j之后,一些加了@Transactional注解使用mysql事务的方法就会报错,有的甚至可能项目启动就报错了
这是因为在引入了Neo4J依赖库之后,transactionManager就变成了Neo4jTransactionManager,所以就要去修改默认事务。
-
- // 修改默认事务,加载了Neo4J依赖库之后,transactionManager变成Neo4jTransactionManager,不增加此处,启动会报错,Mysql无法使用。
- @Bean("transactionManager")
- @Primary
- public 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整合也可以查看官方文档
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。