0
点赞
收藏
分享

微信扫一扫

Neo4j图数据库学习之:Springboot整合Neo4j图数据库实践

一、项目创建

新建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.2 关系类创建

import lombok.Data;
import org.neo4j.ogm.annotation.EndNode;
import org.neo4j.ogm.annotation.Property;
import org.neo4j.ogm.annotation.RelationshipEntity;
import org.neo4j.ogm.annotation.StartNode;
import org.springframework.data.neo4j.core.schema.GeneratedValue;
import org.springframework.data.neo4j.core.schema.Id;

@Data
@RelationshipEntity(type ="BelongTo")
public class Relation {
    @Id
    @GeneratedValue
    private Long id;

    @Property
    private String relation;

    @StartNode
    private Developer start;

    @EndNode
    private Department end;

}

3.3 repository映射类创建:

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);
}

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);
    }

未完待续…

举报

相关推荐

0 条评论