sprinboot+vue集成neo4j图数据库

简介: sprinboot+vue集成neo4j图数据库

一 、java后台

1.1
package com.admin.domain;

/**

  • 功能描述:
    *
  • @author wangwei
  • @date 2024-01-15 22:13
    */
    public class ConnectWeb {

    private String connectWebId;

    private String connectWebName;

    private String connectWebInfo;

    private String personWebIdAlpha;

    private String personWebIdBeta;

    private String personWebIdAlphaName;

    private String personWebIdBetaName;

    public String getPersonWebIdAlphaName() {

     return personWebIdAlphaName;
    

    }

    public void setPersonWebIdAlphaName(String personWebIdAlphaName) {

     this.personWebIdAlphaName = personWebIdAlphaName;
    

    }

    public String getPersonWebIdBetaName() {

     return personWebIdBetaName;
    

    }

    public void setPersonWebIdBetaName(String personWebIdBetaName) {

     this.personWebIdBetaName = personWebIdBetaName;
    

    }

    public String getConnectWebId() {

     return connectWebId;
    

    }

    public void setConnectWebId(String connectWebId) {

     this.connectWebId = connectWebId;
    

    }

    public String getConnectWebName() {

     return connectWebName;
    

    }

    public void setConnectWebName(String connectWebName) {

     this.connectWebName = connectWebName;
    

    }

    public String getConnectWebInfo() {

     return connectWebInfo;
    

    }

    public void setConnectWebInfo(String connectWebInfo) {

     this.connectWebInfo = connectWebInfo;
    

    }

    public String getPersonWebIdAlpha() {

     return personWebIdAlpha;
    

    }

    public void setPersonWebIdAlpha(String personWebIdAlpha) {

     this.personWebIdAlpha = personWebIdAlpha;
    

    }

    public String getPersonWebIdBeta() {

     return personWebIdBeta;
    

    }

    public void setPersonWebIdBeta(String personWebIdBeta) {

     this.personWebIdBeta = personWebIdBeta;
    

    }

    @Override
    public String toString() {

     return "ConnectWeb{" +
             "connectWebId='" + connectWebId + '\'' +
             ", connectWebName='" + connectWebName + '\'' +
             ", connectWebInfo='" + connectWebInfo + '\'' +
             ", personWebIdAlpha='" + personWebIdAlpha + '\'' +
             ", personWebIdBeta='" + personWebIdBeta + '\'' +
             ", personWebIdAlphaName='" + personWebIdAlphaName + '\'' +
             ", personWebIdBetaName='" + personWebIdBetaName + '\'' +
             '}';
    

    }
    }

1.2

package com.admin.domain;

/**

  • 功能描述:
    人物属性实体描述
  • @author wangwei
  • @date 2024-01-15 22:12
    */
    public class PersonWeb {

    private String personWebId;

private String personWebName;

private String personWebPic;

private String personWebShow;

private String personWebLink;

private String personWebPlatform;

private String personWebField;

private String personWebInfo;

private String personWebKey;

public String getPersonWebId() {
    return personWebId;
}

public void setPersonWebId(String personWebId) {
    this.personWebId = personWebId;
}

public String getPersonWebName() {
    return personWebName;
}

public void setPersonWebName(String personWebName) {
    this.personWebName = personWebName;
}

public String getPersonWebPlatform() {
    return personWebPlatform;
}

public void setPersonWebPlatform(String personWebPlatform) {
    this.personWebPlatform = personWebPlatform;
}

public String getPersonWebField() {
    return personWebField;
}

public void setPersonWebField(String personWebField) {
    this.personWebField = personWebField;
}

public String getPersonWebInfo() {
    return personWebInfo;
}

public void setPersonWebInfo(String personWebInfo) {
    this.personWebInfo = personWebInfo;
}

public String getPersonWebKey() {
    return personWebKey;
}

public void setPersonWebKey(String personWebKey) {
    this.personWebKey = personWebKey;
}

public String getPersonWebPic() {
    return personWebPic;
}

public void setPersonWebPic(String personWebPic) {
    this.personWebPic = personWebPic;
}

public String getPersonWebShow() {
    return personWebShow;
}

public void setPersonWebShow(String personWebShow) {
    this.personWebShow = personWebShow;
}

public String getPersonWebLink() {
    return personWebLink;
}

public void setPersonWebLink(String personWebLink) {
    this.personWebLink = personWebLink;
}

@Override
public String toString() {
    return "PersonWeb{" +
            "personWebId='" + personWebId + '\'' +
            ", personWebName='" + personWebName + '\'' +
            ", personWebPic='" + personWebPic + '\'' +
            ", personWebShow='" + personWebShow + '\'' +
            ", personWebLink='" + personWebLink + '\'' +
            ", personWebPlatform='" + personWebPlatform + '\'' +
            ", personWebField='" + personWebField + '\'' +
            ", personWebInfo='" + personWebInfo + '\'' +
            ", personWebKey='" + personWebKey + '\'' +
            '}';
}

}

1.3
package com.admin.controller;

import com.admin.common.core.controller.BaseController;
import com.admin.common.core.domain.AjaxResult;
import com.admin.common.core.page.TableDataInfo;
import com.admin.domain.ConnectWeb;
import com.admin.domain.PersonWeb;
import com.admin.service.WebService;
import com.admin.utils.transport.Result;
import org.neo4j.driver.Record;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**

  • 功能描述:
    *
  • @author wangwei
  • @date 2024-01-16 11:09
    */
    @RestController
    @RequestMapping("/people/web")
    public class WebController extends BaseController {

    @Autowired
    private WebService webService;

    @GetMapping("/map")
    public TableDataInfo getPersonWebMap() {

     List<Record> list = webService.selectPersonWebMap();
     return getDataTable(list);
    

    }

    @GetMapping("/list")
    public TableDataInfo getPersonWebList() {

     List<PersonWeb> list = webService.selectPersonWebList();
     return getDataTable(list);
    

    }

    @GetMapping("/search/{personWebName}")
    public AjaxResult getPersonWebSearchList(@PathVariable("personWebName") String personWebName) {

     List<PersonWeb> list = webService.selectPersonWebSearchList(personWebName);
     return AjaxResult.success(list);
    

    }

    @GetMapping("/search/{personWebId}/{personWebName}")
    public AjaxResult getPersonWebSearchListOther(@PathVariable("personWebName") String personWebName, @PathVariable("personWebId") String personWebId) {

     List<PersonWeb> list = webService.selectPersonWebSearchListOther(personWebName, personWebId);
     return AjaxResult.success(list);
    

    }

    @GetMapping(value = "/person/{personWebId}")
    public AjaxResult getPersonWebInfo(@PathVariable("personWebId") String personWebId) {

     return AjaxResult.success(webService.selectPersonWebById(personWebId));
    

    }

    @PostMapping("/person")
    public AjaxResult addPersonWeb(@RequestBody PersonWeb personWeb) {

     return toAjax(webService.insertPersonWeb(personWeb));
    

    }

    @PutMapping("/person")
    public AjaxResult editPersonWeb(@RequestBody PersonWeb personWeb) {

     return toAjax(webService.updatePersonWeb(personWeb));
    

    }

    @DeleteMapping("/person/{personWebId}")
    public AjaxResult removePersonWeb(@PathVariable String personWebId) {

     try{
         int rsg = webService.deletePersonWeb(personWebId);
         return toAjax(rsg);
     } catch (Exception e){
         return AjaxResult.error(500, "此节点仍与其他节点有关联关系!");
     }
    

    }

    @GetMapping(value = "/connect/{connectWebId}")
    public AjaxResult getInfoConnectWeb(@PathVariable("connectWebId") String connectWebId) {

     return AjaxResult.success(webService.selectConnectWebById(connectWebId));
    

    }

    @PostMapping("/connect")
    public AjaxResult addConnectWeb(@RequestBody ConnectWeb connectWeb) {

     return toAjax(webService.insertConnectWeb(connectWeb));
    

    }

    @PutMapping("/connect")
    public AjaxResult editConnectWeb(@RequestBody ConnectWeb connectWeb) {

     return toAjax(webService.updateConnectWeb(connectWeb));
    

    }

    @DeleteMapping("/connect/{connectWebId}")
    public AjaxResult removeConnectWeb(@PathVariable String connectWebId) {

     return toAjax(webService.deleteConnectWeb(connectWebId));
    

    }
    }
    1.4
    package com.admin.service;

import com.admin.domain.ConnectWeb;
import com.admin.domain.PersonWeb;
import org.neo4j.driver.Record;

import java.util.List;

public interface WebService {
List selectPersonWebMap();

public List<PersonWeb> selectPersonWebList() ;

public List<PersonWeb> selectPersonWebSearchList(String personWebName) ;

public List<PersonWeb> selectPersonWebSearchListOther(String personWebName, String personWebId) ;

public PersonWeb selectPersonWebById(String personWebId) ;

public int insertPersonWeb(PersonWeb personWeb) ;

public int updatePersonWeb(PersonWeb personWeb) ;

public int deletePersonWeb(String personWebId) ;

public ConnectWeb selectConnectWebById(String connectWebId) ;

public int insertConnectWeb(ConnectWeb connectWeb) ;

public int updateConnectWeb(ConnectWeb connectWeb) ;

public int deleteConnectWeb(String connectWebId) ;

}
1.5
package com.admin.service.impl;

import com.admin.common.annotation.DataSource;
import com.admin.common.enums.DataSourceType;
import com.admin.domain.ConnectWeb;
import com.admin.domain.PersonWeb;
import com.admin.mapper.ConnectWebMapper;
import com.admin.mapper.PersonWebMapper;
import com.admin.service.WebService;
import com.admin.utils.SnowflakeIdWorker;
import org.neo4j.driver.Record;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class WebServiceImpl implements WebService {

@Autowired
private PersonWebMapper personWebMapper;

@Autowired
private ConnectWebMapper connectWebMapper;

@Autowired
private SnowflakeIdWorker snowflakeIdWorker;



@DataSource(value = DataSourceType.SLAVE)
public List<Record> selectPersonWebMap() {
    return personWebMapper.selectPersonWebMap();
}

@DataSource(value = DataSourceType.SLAVE)
public List<PersonWeb> selectPersonWebList() {
    List<PersonWeb> personWebs = personWebMapper.selectPersonWebList();
    return  personWebs;
}

@DataSource(value = DataSourceType.SLAVE)
public List<PersonWeb> selectPersonWebSearchList(String personWebName) {

// System.out.println(personWebName);
return personWebMapper.selectPersonWebSearchList(personWebName);
}

@DataSource(value = DataSourceType.SLAVE)
public List<PersonWeb> selectPersonWebSearchListOther(String personWebName, String personWebId) {

// System.out.println(personWebName);
return personWebMapper.selectPersonWebSearchListOther(personWebName, personWebId);
}

@DataSource(value = DataSourceType.SLAVE)
public PersonWeb selectPersonWebById(String personWebId) {
    return personWebMapper.selectPersonWebById(personWebId);
}

@DataSource(value = DataSourceType.SLAVE)
public int insertPersonWeb(PersonWeb personWeb) {
    personWeb.setPersonWebId(snowflakeIdWorker.nextId());
    return personWebMapper.insertPersonWeb(personWeb);
}

@DataSource(value = DataSourceType.SLAVE)
public int updatePersonWeb(PersonWeb personWeb) {
    return personWebMapper.updatePersonWeb(personWeb);
}

@DataSource(value = DataSourceType.SLAVE)
public int deletePersonWeb(String personWebId) {
    return personWebMapper.deletePersonWeb(personWebId);
}

@DataSource(value = DataSourceType.SLAVE)
public ConnectWeb selectConnectWebById(String connectWebId) {
    return connectWebMapper.selectConnectWebById(connectWebId);
}

@DataSource(value = DataSourceType.SLAVE)
public int insertConnectWeb(ConnectWeb connectWeb) {
    connectWeb.setConnectWebId(snowflakeIdWorker.nextId());
    return connectWebMapper.insertConnectWeb(connectWeb);
}

@DataSource(value = DataSourceType.SLAVE)
public int updateConnectWeb(ConnectWeb connectWeb) {
    return connectWebMapper.updateConnectWeb(connectWeb);
}

@DataSource(value = DataSourceType.SLAVE)
public int deleteConnectWeb(String connectWebId) {
    return connectWebMapper.deleteConnectWeb(connectWebId);
}

}

1.6
package com.admin.mapper;

import com.admin.domain.ConnectWeb;
import org.springframework.stereotype.Repository;

/**

  • @author wangwei
    */
    @Repository
    public interface ConnectWebMapper {

    /**

    • 查询单个连接信息
      *
    • @param connectWebId 连接id
    • @return ConnectWeb实体信息
      */
      ConnectWeb selectConnectWebById(String connectWebId);

      /**

    • 插入单个连接信息
      *
    • @param connectWeb 连接实体
    • @return 插入个数
      */
      int insertConnectWeb(ConnectWeb connectWeb);

      /**

    • 修改单个连接信息
      *
    • @param connectWeb 修改实体
    • @return 插入个数
      */
      int updateConnectWeb(ConnectWeb connectWeb);

      /**

    • 删除单个连接
      *
    • @param connectWebId 连接实体
    • @return 删除个数
      */
      int deleteConnectWeb(String connectWebId);
      }

1.7
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">




MATCH (m)-[c:ConnectWeb{
connectWebId: #{connectWebId}
}]->(n)
RETURN
c.connectWebId as connectWebId,
c.connectWebName as connectWebName,
c.connectWebInfo as connectWebInfo,
m.personWebId as personWebIdAlpha,
m.personWebName as personWebIdAlphaName,
n.personWebId as personWebIdBeta,
n.personWebName as personWebIdBetaName



match(pa:PersonWeb{
personWebId: #{personWebIdAlpha}
}),(pb:PersonWeb{
personWebId: #{personWebIdBeta}
})
merge (pa)-[c:ConnectWeb{
connectWebId: #{connectWebId},
connectWebName: #{connectWebName},
connectWebInfo: #{connectWebInfo}
}]->(pb)



MATCH (m)-[c:ConnectWeb{
connectWebId: #{connectWebId}
}]->(n)

c.connectWebName = #{connectWebName},
c.connectWebInfo = #{connectWebInfo},
m.personWebId = #{personWebIdAlpha},
n.personWebId = #{personWebIdBeta},




MATCH ()-[c:ConnectWeb{
connectWebId: #{connectWebId}
}]-()
DELETE c


1.81.8 maven

    <!--手动添加-->
    <!--neo4j-jdbc-driver-->
    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-jdbc-driver</artifactId>
        <version>4.0.1</version>
    </dependency>

1.9 数据库配置

  #TODO 从库数据源 neo4j
        slave:
            # 从数据源开关/默认关闭
            enabled: true
            url: jdbc:neo4j:bolt://127.0.0.1:1273
            username: neo4j
            password: neo4j
            driverClassName: org.neo4j.jdbc.bolt.BoltDriver


                     #TODO NEO4J 配置检测连接是否有效
        validationQuery: match (n) return id(n) limit 2

二、vue前台

2.1









新增成员



修改成员



新增关系









{ { scope.row.personWebName }}

{ { scope.row.personWebName }}













{ {ikey}}







{ { scope.row.personWebShow | statusShowFilter}}





修改

删除


































删除
取消
确定
















上传图片


更新图片


预览






{ {dict.dictLabel}}






{ {tag}}



+ 新标签








{ {dict.dictLabel}}
















确定






2.2

import request from '@/utils/request'

export function getPersonWebMap() {
return request({
url: '/people/web/map',
method: 'get'
})
}

export function getPersonWebList() {
return request({
url: '/people/web/list',
method: 'get'
})
}

export function getPersonWebSearch(personName) {
return request({
url: '/people/web/search/' + personName,
method: 'get'
})
}

export function getPersonWebSearchOther(personId, personName) {
return request({
url: '/people/web/search/' + personId + '/' + personName,
method: 'get'
})
}

export function getPersonWebInfo(personId) {
return request({
url: '/people/web/person/' + personId,
method: 'get'
})
}

export function addPersonWeb(data) {
return request({
url: '/people/web/person',
method: 'post',
data: data
})
}

export function editPersonWeb(data) {
return request({
url: '/people/web/person',
method: 'put',
data: data
})
}

export function removePersonWeb(personId) {
return request({
url: '/people/web/person/' + personId,
method: 'delete'
})
}

export function getInfoConnectWeb(connectId) {
return request({
url: '/people/web/connect/' + connectId,
method: 'get'
})
}

export function addConnectWeb(data) {
return request({
url: '/people/web/connect',
method: 'post',
data: data
})
}

export function editConnectWeb(data) {
return request({
url: '/people/web/connect',
method: 'put',
data: data
})
}

export function removeConnectWeb(connectId) {
return request({
url: '/people/web/connect/' + connectId,
method: 'delete'
})
}

三、展示

image.png
image.pngimage.pngimage.png

image.png

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
16天前
|
SQL JavaScript 前端开发
vue中使用分页组件、将从数据库中查询出来的数据分页展示(前后端分离SpringBoot+Vue)
这篇文章详细介绍了如何在Vue.js中使用分页组件展示从数据库查询出来的数据,包括前端Vue页面的表格和分页组件代码,以及后端SpringBoot的控制层和SQL查询语句。
vue中使用分页组件、将从数据库中查询出来的数据分页展示(前后端分离SpringBoot+Vue)
|
7天前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的考试管理系统(含教程&源码&数据库数据)
在数字化时代背景下,本文详细介绍了如何使用Spring Boot框架结合Vue.js技术栈,实现一个前后端分离的考试管理系统。该系统旨在提升考试管理效率,优化用户体验,确保数据安全及可维护性。技术选型包括:Spring Boot 2.0、Vue.js 2.0、Node.js 12.14.0、MySQL 8.0、Element-UI等。系统功能涵盖登录注册、学员考试(包括查看试卷、答题、成绩查询等)、管理员功能(题库管理、试题管理、试卷管理、系统设置等)。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的考试管理系统(含教程&源码&数据库数据)
|
12天前
|
JavaScript Java Maven
毕设项目&课程设计&毕设项目:springboot+vue实现的在线求职管理平台(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和Vue.js实现的在线求职平台。该平台采用了前后端分离的架构,使用Spring Boot作为后端服务
毕设项目&课程设计&毕设项目:springboot+vue实现的在线求职管理平台(含教程&源码&数据库数据)
|
12天前
|
存储 JavaScript 前端开发
Vue中通过集成Quill富文本编辑器实现公告的发布。Vue项目中vue-quill-editor的安装与使用【实战开发应用】
文章展示了在Vue项目中通过集成Quill富文本编辑器实现公告功能的完整开发过程,包括前端的公告发布、修改、删除操作以及后端的数据存储和处理逻辑。
Vue中通过集成Quill富文本编辑器实现公告的发布。Vue项目中vue-quill-editor的安装与使用【实战开发应用】
|
16天前
|
XML SQL JavaScript
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
这篇文章介绍了如何在Vue页面中结合SpringBoot、MyBatis、ElementUI和ECharts,实现从数据库获取数据并展示为图表的过程,包括前端和后端的代码实现以及遇到的问题和解决方法。
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
|
16天前
|
JavaScript 前端开发 数据处理
在vue中的form表单中下拉框中的数据来自数据库查询到的数据
这篇文章介绍了如何在Vue框架的表单中将下拉框的数据通过后端接口从数据库动态查询并加载,包括前端HTML代码、JavaScript数据处理、后端接口实现以及表单提交的完整流程。
在vue中的form表单中下拉框中的数据来自数据库查询到的数据
|
16天前
|
数据库 知识图谱
知识图谱(Knowledge Graph)- Neo4j 5.10.0 Desktop & GraphXR 连接自建数据库
知识图谱(Knowledge Graph)- Neo4j 5.10.0 Desktop & GraphXR 连接自建数据库
29 0
|
2月前
|
SQL DataWorks 关系型数据库
DataWorks产品使用合集之数据集成时源头提供数据库自定义函数调用返回数据,数据源端是否可以写自定义SQL实现
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
2月前
|
数据采集 分布式计算 大数据
MaxCompute产品使用合集之数据集成中进行数据抽取时,是否可以定义使用和源数据库一样的字符集进行抽取
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
9天前
|
SQL 关系型数据库 MySQL
【揭秘】MySQL binlog日志与GTID:如何让数据库备份恢复变得轻松简单?
【8月更文挑战第22天】MySQL的binlog日志记录数据变更,用于恢复、复制和点恢复;GTID为每笔事务分配唯一ID,简化复制和恢复流程。开启binlog和GTID后,可通过`mysqldump`进行逻辑备份,包含binlog位置信息,或用`xtrabackup`做物理备份。恢复时,使用`mysql`命令执行备份文件,或通过`innobackupex`恢复物理备份。GTID模式下的主从复制配置更简便。
47 2

热门文章

最新文章

下一篇
云函数