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
相关文章
|
19天前
|
缓存 资源调度 JavaScript
Vue集成Excalidraw实现在线画板功能
Excalidraw是一款开源在线绘图工具,适用于白板、思维导图、原型设计等场景。支持手绘风格、多种图形元素、导出功能及多人协作,深受开发者喜爱。本文档介绍了如何在Vue项目中集成Excalidraw,包括安装依赖、配置文件修改、页面添加等步骤,帮助开发者快速上手。
Vue集成Excalidraw实现在线画板功能
|
2月前
|
存储 人工智能 Java
Neo4j从入门到精通:打造高效知识图谱数据库 | AI应用开发
在大数据和人工智能时代,知识图谱作为一种高效的数据表示和查询方式,逐渐受到广泛关注。本文从入门到精通,详细介绍知识图谱及其存储工具Neo4j,涵盖知识图谱的介绍、Neo4j的特点、安装步骤、使用方法(创建、查询)及Cypher查询语言的详细讲解。通过本文,读者将全面了解如何利用Neo4j处理复杂关系数据。【10月更文挑战第14天】
144 6
|
3月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
|
2月前
|
存储 NoSQL API
使用Py2neo进行Neo4j图数据库的增删改查操作
使用Py2neo进行Neo4j图数据库的增删改查操作
94 5
|
2月前
|
SQL 机器学习/深度学习 数据库
SQL与Python集成:数据库操作无缝衔接
在开始之前,确保你已经安装了必要的Python库,如`sqlite3`(用于SQLite数据库)或`psycopg2`(用于PostgreSQL数据库)。这些库提供了Python与SQL数据库之间的接口。
|
2月前
|
SQL 机器学习/深度学习 数据采集
SQL与Python集成:数据库操作无缝衔接2a.bijius.com
Python与SQL的集成是现代数据科学和工程实践的核心。通过有效的数据查询、管理与自动化,可以显著提升数据分析和决策过程的效率与准确性。随着技术的不断发展,这种集成的应用场景将更加广泛,为数据驱动的创新提供更强大的支持。
|
2月前
|
SQL 机器学习/深度学习 数据库
SQL与Python集成:数据库操作无缝衔接
1. Python与SQL集成的关键步骤 在开始之前,确保你已经安装了必要的Python库,如`sqlite3`(用于SQLite数据库)或`psycopg2`(用于PostgreSQL数据库)。这些库提供了Python与SQL数据库之间的接口。
|
3月前
|
前端开发 JavaScript 开发者
Express.js与前端框架的集成:React、Vue和Angular的示例与技巧
本文介绍了如何将简洁灵活的Node.js后端框架Express.js与三大流行前端框架——React、Vue及Angular进行集成,以提升开发效率与代码可维护性。文中提供了详细的示例代码和实用技巧,展示了如何利用Express.js处理路由和静态文件服务,同时在React、Vue和Angular中构建用户界面,帮助开发者快速掌握前后端分离的开发方法,实现高效、灵活的Web应用构建。
63 3
|
4月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的选课管理系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js技术栈的高校选课管理系统的设计与实现。该系统采用前后端分离架构,旨在提高选课效率、优化资源分配及提升用户体验。技术栈包括:后端Spring Boot 2.0、前端Vue 2.0、数据库MySQL 8.0、开发环境JDK 1.8和Maven 3.6等。系统功能覆盖登录、学生信息管理、选课管理、成绩查询等多个方面,并针对学生、教师和管理员提供了不同的操作界面。系统采用了响应式设计,支持多设备访问,并通过Element UI增强了界面的友好性和交互性。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的选课管理系统(含教程&源码&数据库数据)
|
4月前
|
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实现的前后端分离的考试管理系统(含教程&源码&数据库数据)