neo4j使用详解(终章、neo4j的java driver使用模板及工具类——<可用于生产>)

请添加图片描述

Neo4j系列导航:
neo4j安装及简单实践
cypher语法基础
cypher插入语法
cypher插入语法
cypher查询语法
cypher通用语法
cypher函数语法
neo4j索引及调优
neo4j java Driver等更多


1. 简介

本文主要是java使用neo4j driver操作neo4j的模板项目及非常有用的工具类,主要包括:

  1. 图谱操作的http请求参数及响应参数标准数据结构定义(node,edge,graph等)
  2. 一次性操作多个node,多个edge或者path(graph)的模板代码工具类
  3. 使用事务一次提交多个cql的使用模板
  4. 可以支持连接多个neo4j实例的方法
  5. 使用时保证sql注入的实现

2.项目架构

3.实现

3.1.pom文件

因为此项目使用的是jdk8,所以neo4j使用的是3.x版本,更多版本适配请参照: 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.3.4.RELEASE</version>
        <relativePath/>
    </parent>
     <groupId>com.test</groupId>
    <artifactId>neo4j-template</artifactId>
    <version>1.1.0</version>
    <name>neo4j-template</name>
    <description>neo4j模板服务</description>
    <dependencies>
    	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
        </dependency>
        <!--neo4j的driver依赖 -->
        <dependency>
            <groupId>org.neo4j.driver</groupId>
            <artifactId>neo4j-java-driver</artifactId>
            <version>4.4.9</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>
        <dependency>
            <groupId>org.javatuples</groupId>
            <artifactId>javatuples</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
     <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

3.2.controller层

controller怎么写不重要,主要为了保持项目的完整性,使用时可以根据业务需求开发。

@Api(tags = "图数据库接口")
@Validated
@RestController
public class GraphController {
   
    @Autowired
    private GraphService service;

    @ApiOperation("添加图谱")
    @PostMapping("/v1/graph")
    public Response<String> put(@RequestBody @Valid GraphReqDto dto) {
   
        service.post(dto);
        return BdResponse.success();
    }

    @ApiOperation("删除图谱")
    @PostMapping("/v1/graph/{label}")
    public Response<String> delete(@PathVariable @NotBlank String label, @RequestBody Map<String, Object> dto) {
   
        service.delete(label, dto);
        return BdResponse.success();
    }

    @ApiOperation("查询图谱根据label")
    @GetMapping("/v1/graph/{label}")
    public Response<GraphDbMd> queryByLabel(@PathVariable @NotBlank String label) {
   
        return Response.success(service.queryByLabel(label));
    }

    @ApiOperation("查询节点的入度节点")
    @GetMapping("/v1/graph-in-vertex/{label}/{id}")
    public Response<GraphDbMd> queryInVertexById(@PathVariable @NotBlank String label, @PathVariable @NotBlank String id) {
   
        return Response.success(service.queryAllInVertexById(label, Long.parseLong(id)));
    }

    @ApiOperation("查询节点的出度节点")
    @GetMapping("/v1/graph-out-vertex/{label}/{id}")
    public Response<GraphDbMd> queryOutVertexById(@PathVariable @NotBlank String label, @PathVariable @NotBlank String id) {
   
        return Response.success(service.
  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值