Neo4j图数据库学习之:Springboot整合Neo4j图数据库实践
一、项目创建1、2、二、配置三、使用
·
一、项目创建
新建springboot项目,项目结构如下:
(1)结构说明:
controller:控制层;
service:服务层;
config:项目配置类
dao: 关系数据库对应的实体类;
entity:与图数据库对应的节点类;
repository:节点类对应的仓库类,使用jpa,实现neo4j的相关操作
mapper:操作关系数据库、mybatis的映射文件
utils:工具类
(2)springboot版本:2.6.3
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
二、配置
2.1 POM中Neo4j依赖配置:
<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.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework.experimental</groupId>
<artifactId>spring-native</artifactId>
<version>${spring-native.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--postgresql相关配置-->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<!--neo4j相关配置-->
<dependency>
<groupId>org.neo4j.driver</groupId>
<artifactId>neo4j-java-driver</artifactId>
<version>4.4.2</version>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm-embedded-driver</artifactId>
<version>3.2.28</version>
<exclusions>
<exclusion>
<artifactId>classgraph</artifactId>
<groupId>io.github.classgraph</groupId>
</exclusion>
</exclusions>
<!-- <scope>test</scope>-->
</dependency>
</dependencies>
2.2 application.properties文件配置:
# neo4j config
spring.data.neo4j.open-in-view=false
spring.data.neo4j.uri= bolt://localhost:7687
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=neo4j
三、使用
以创建一个开发者和所属部门关系为例
3.1 实体类创建
使用jpa自动构建实体,减少代码量,需要lombok包
import lombok.Data;
import org.neo4j.ogm.annotation.NodeEntity;
import org.springframework.data.neo4j.core.schema.GeneratedValue;
import org.springframework.data.neo4j.core.schema.Id;
import org.springframework.data.neo4j.core.schema.Property;
import java.io.Serializable;
/**
* 开发者实体类
*/
@Data
@NodeEntity(label = "Developer")
public class Developer implements Serializable {
@Id
@GeneratedValue
private Long id;
@Property
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
import lombok.Data;
import org.neo4j.ogm.annotation.NodeEntity;
import org.springframework.data.neo4j.core.schema.GeneratedValue;
import org.springframework.data.neo4j.core.schema.Id;
import org.springframework.data.neo4j.core.schema.Property;
import java.io.Serializable;
/**
* 部门实体类
*/
@Data
@NodeEntity(label = "Department")
public class Department implements Serializable {
@Id
@GeneratedValue
private Long id;
@Property
private String name;
private Long DepartmentId;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getDepartmentId() {
return DepartmentId;
}
public void setDepartmentId(Long departmentId) {
DepartmentId = departmentId;
}
}
3.3 repository映射类创建:
(1) Developer对应的仓库类
import com.Demo.neo4j.entity.Developer;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.neo4j.repository.query.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface DeveloperRepository extends Neo4jRepository<Developer,Long> {
/**
* 获取开发者节点集合
* @return
*/
@Query("MATCH (n:Developer) RETURN n ")
List<Developer> getDeveloperList();
/**
* 创建开发者节点
* @param name
* @return
*/
@Query("create (n:Developer{name:{name}}) RETURN n")
List<Developer> addDeveloperList(@Param("name") String name);
}
(2) Department对应的仓库类
import com.chinadci.neo4j.dao.entity.Department;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.neo4j.repository.query.Query;
import org.springframework.data.repository.query.Param;
public interface DepartmentRepository extends Neo4jRepository<Department,Long> {
@Query("MATCH (d:Department) WHERE d.name = $name return d")
Department findDepartmentByName(@Param("name") String name);
/**
* 自定义创建developer与department间关系的方法
* @param person
* @param department
*/
@Query("MATCH (p:Person{name:$person}),(d:Department{name:$department}) with p,d"
+ " CREATE (p)-[r:RELATION{name:'BelongTo'}]->(d)")
void createPToDRel(@Param("person") String person,@Param("department") String department);
}
3.4 Controller层代码:
@ApiOperation(value = "实体创建")
@RequestMapping(value = "/createGraphData",method = RequestMethod.POST)
public ServiceResult createGraphData(
@RequestParam(name = "label") @ApiParam(value = "创建节点所属标签",required = true) String label,
@RequestParam(name = "name") @ApiParam(value = "创建节点名称",required = true) String name
){
return graphDbService.createGraphData(label,name);
}
3.5 Service层代码:
方式一:通过repository自带save方式创建
public ServiceResult createGraphData(String label, String name){
List res = new ArrayList();
try{
Developer developer = new Developer();
developer.setName(name);
developerRepository.save(developer);
res.add(developer);
}catch (Exception e){
return new ServiceResult(ServiceResult.ServiceErrorCode.UNKNOWN_ERROR, e.getMessage());
}
return new ServiceResult(res);
}
方式二:
通过repository中自定义的addDeveloperList方法创建:
public ServiceResult createGraphData2(String label, String name){
List res = new ArrayList();
try{
Developer developer = new Developer();
developer.setName(name);
developerRepository.addDeveloperList(name);
res.add(developer);
}catch (Exception e){
return new ServiceResult(ServiceResult.ServiceErrorCode.UNKNOWN_ERROR, e.getMessage());
}
return new ServiceResult(res);
}
service层调用DepartmentRepository中方法实现关系创建:
departmentRepository.createPToDRel("小慧","研发中心");
结果示例:
更多推荐
已为社区贡献1条内容
所有评论(0)