提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
什么是neo4j
Neo4j是一种高性能图形数据库管理系统,使用图形结构来存储和处理数据。它以节点(Node)和关系(Relationship)的形式存储数据,并使用图形查询语言(Cypher)来执行查询和分析。Neo4j的优势包括灵活性、可扩展性和高效性,特别适用于需要处理复杂关系和大量连接数据的应用场景,如社交网络、推荐系统、网络安全等
Docker 安装部署 Neo4j
- docker 拉取neo4j镜像
docker pull neo4j:3.5
- 查看镜像是否拉取成功
docker images
- docker 启动 neo4j
docker run -d --name neo4j -p 7474:7474 -p 7687:7687 neo4j:3.5
- 查看neo4j是否启动成功
docker ps
浏览器访问 服务器ip
:7474
成功出现如下画面即代表成功
其中初始账号密码都为 neo4j
,在第一次登录时候会强制修改密码,大家根据自己设置密码
SpringBoot整合Neo4j
先简单看一下我的项目目录
导包
<?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>2.6.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>test-springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>test-springboot</name>
<description>test-springboot</description>
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</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>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
编写配置类
spring:
data:
neo4j:
uri: bolt://106.55.229.181:7687
username: neo4j
password: mypassword
编写实体类
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.neo4j.core.schema.GeneratedValue;
import org.springframework.data.neo4j.core.schema.Id;
import org.springframework.data.neo4j.core.schema.Property;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Artist {
@Id
@GeneratedValue
private Long id;
@Property
private String name;
@Property
private String gender;
@Property
private String descent;
@Property
private String birthday;
}
编写ArtistRepository类
ArtistRepository继承的Neo4jRepository有很多方法可以直接使用,等会在测试里面可以用到
import com.example.testspringboot.entity.Artist;
import org.springframework.data.neo4j.repository.Neo4jRepository;
public interface ArtistRepository extends Neo4jRepository<Artist,Long> {
/**
* 通过@Query实现节点内容修改
*/
@Query("MATCH (a:Artist) " +
"WHERE id(a) = $id " +
"SET a.name = $name, a.gender = $gender, a.descent = $descent, a.birthday = $birthday " +
"RETURN a")
Artist update(Long id, String name, String gender, String descent, String birthday);
}
测试
import com.example.testspringboot.dao.ArtistRepository;
import com.example.testspringboot.entity.Artist;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.List;
@SpringBootTest
class TestSpringbootApplicationTests {
@Resource
private ArtistRepository artistRepository;
/**
* 查找歌手节点
*/
@Test
void findArtist(){
List<Artist> all = artistRepository.findAll();
System.out.println(all);
}
/**
* 创建歌手节点
*/
@Test
void createArtist(){
Artist artist = Artist.builder()
.name("周杰伦")
.gender("男")
.birthday("1979-01-18")
.descent("中国")
.build();
Artist save = artistRepository.save(artist);
System.out.println(save);
// 利用findById验证
System.out.println(artistRepository.findById(save.getId()));
}
/**
* 删除 id 删除节点
*/
@Test
void deleteArtist(){
// 利用执行前后歌曲节数量变化判断是否删除成功
long old = artistRepository.count();
artistRepository.deleteById(0L);
long now = artistRepository.count();
System.out.println(now>old ? "删除成功":"删除失败");
}
/**
* 修改节点
*/
@Test
void updateArtist(){
// 在这里我故意创建一个错误的周杰伦节点,其中性别和出生日期错误
Artist artist = Artist.builder()
.name("周杰伦")
.gender("女")
.birthday("2001-01-01")
.descent("中国")
.build();
Artist save = artistRepository.save(artist);
System.out.println(save);
// 将其中的性别和出生日期属性修改为正确的
save.setGender("男");
save.setBirthday("1979-01-18");
// Neo4jRepository 中没有内置的修改节点方法,在这里我们可以通过在ArtistRepository创建的方法实现
Artist update = artistRepository.update(save.getId(),
save.getName(),
save.getGender(),
save.getDescent(),
save.getBirthday());
System.out.println(update);
}
}
以上就是Docker部署Neo4j以及SpringBoot整合Neo4j的内容,博主在gitee上传过一个关于SpringBoot使用neo4j数据库的项目,大家有兴趣的话可以看一下,链接: