SpringBoot 集成 Nebula

工作需求,开始了解图数据库,经过工具选型,最终选择nebula graph,并集成到springboot,java 环境下如何对 Nebula Graph 进行操作,本文整理下过程。

1、首先引入 pom 依赖

<dependency><groupId>com.vesoft</groupId><artifactId>client</artifactId><version>3.0.0</version>
</dependency>

为方便解析 json ,这里把 fastjson 也引进来。

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.78</version>
</dependency>

 2、配置文件中配置 Nebula 的信息

nebula:address[0]:host: 192.168.40.130port: 9669username: rootpassword: rootreconnect: falsespace: javatest

3、java配置过程,文件结构如下:

1)声明 NebulaProperties 接收上面的配置信息:
@Data
public class NebulaAddress {private String host;private Integer port;
}
@Data
@Configuration
@ConfigurationProperties(prefix = "nebula")
public class NebulaProperties {private List<NebulaAddress> address;private String username;private String password;private boolean reconnect;private String space;
}
2)声明 NebulaConstant 把常用的字符串声明在这里:
public class NebulaConstant {public static final String USE = "USE ";public static final String SEMICOLON = "; ";public static final String ERROR_CODE = "-1";@Getter@AllArgsConstructorpublic enum NebulaJson{ERRORS("errors"),CODE("code"),MESSAGE("message"),RESULTS("results"),COLUMNS("columns"),DATA("data"),ROW("row");private String key;}
}

 

3)声明 NebulaConfig ,初始化 NebulaPool ,及声明 Session 的获取方式:
  • 便对结果的解析,再声明一个 NebulaResult 用来接收结果:

    @Data
    public class NebulaResult<T> {private Integer code;private String message;private List<T> data;public boolean isSuccessed(){return code == 0;}
    }
4)为了方便对结果的解析,再声明一个 NebulaResult 用来接收结果:
@Data
public class NebulaResult<T> {private Integer code;private String message;private List<T> data;public boolean isSuccessed(){return code == 0;}
}

 

5)每次都是使用 Session 未免太麻烦,这里封装一个 NebulaTemplate 返回上面 对象 :
@Slf4j
@Component
public class NebulaTemplate {@ResourceSession session;public <T> NebulaResult<T> queryObject(String stmt, Class<T> tClass) {NebulaResult<T> nebulaResult = executeObject(stmt);if (Objects.isNull(nebulaResult.getData())) {return nebulaResult;}Optional.ofNullable(nebulaResult.getData()).ifPresent(data -> nebulaResult.setData(data.stream().map(d -> JSONObject.toJavaObject(((JSONObject) d), tClass)).collect(Collectors.toList())));return nebulaResult;}public NebulaResult executeObject(String stmt) {JSONObject jsonObject = executeJson(stmt);return JSONObject.toJavaObject(jsonObject, NebulaResult.class);}public JSONObject executeJson(String stmt) {JSONObject restJson = new JSONObject();try {JSONObject jsonObject = JSON.parseObject(Objects.requireNonNull(session).executeJson(stmt));JSONObject errors = jsonObject.getJSONArray(NebulaConstant.NebulaJson.ERRORS.getKey()).getJSONObject(0);restJson.put(NebulaConstant.NebulaJson.CODE.getKey(), errors.getInteger(NebulaConstant.NebulaJson.CODE.getKey()));if (errors.getInteger(NebulaConstant.NebulaJson.CODE.getKey()) != 0) {restJson.put(NebulaConstant.NebulaJson.MESSAGE.getKey(), errors.getString(NebulaConstant.NebulaJson.MESSAGE.getKey()));return restJson;}JSONObject results = jsonObject.getJSONArray(NebulaConstant.NebulaJson.RESULTS.getKey()).getJSONObject(0);JSONArray columns = results.getJSONArray(NebulaConstant.NebulaJson.COLUMNS.getKey());if (Objects.isNull(columns)) {return restJson;}JSONArray data = results.getJSONArray(NebulaConstant.NebulaJson.DATA.getKey());if (Objects.isNull(data)) {return restJson;}List<JSONObject> resultList = new ArrayList<>();data.stream().map(d -> (JSONObject) d).forEach(d -> {JSONArray row = d.getJSONArray(NebulaConstant.NebulaJson.ROW.getKey());JSONObject map = new JSONObject();for (int i = 0; i < columns.size(); i++) {map.put(columns.getString(i), row.get(i));}resultList.add(map);});restJson.put(NebulaConstant.NebulaJson.DATA.getKey(), resultList);} catch (Exception e) {restJson.put(NebulaConstant.NebulaJson.CODE.getKey(), NebulaConstant.ERROR_CODE);restJson.put(NebulaConstant.NebulaJson.MESSAGE.getKey(), e.toString());log.error("nebula execute err:", e);}return restJson;}
}

 4、测试

@RestController
public class TestController {@ResourceNebulaTemplate nebulaTemplate;@GetMapping("/addVertex")public Object addJSON() throws IOErrorException {String sql = "insert vertex team(team_name, persion_num) values \"team_2\":(\"team_2\", 43);";NebulaResult nebulaResult = nebulaTemplate.executeObject(sql);return nebulaResult;}@GetMapping("/findVertex")public Object findJson2() throws IOErrorException {String sql = "lookup on team  yield id(vertex) AS id,properties(vertex).persion_num AS persion_num,properties(vertex).team_name AS team_name;";NebulaResult<Info> infoNebulaResult = nebulaTemplate.queryObject(sql, Info.class);return infoNebulaResult;}
}

5、常用的nSQL语句

//查看所有边
LOOKUP ON follow YIELD edge AS e;//搜索点
LOOKUP ON entity WHERE entity.name == "20元的东西" YIELD properties(vertex).name as name, properties(vertex).cntt as cntt, properties(vertex).sid as sid, properties(vertex).syspath as syspath;//由一点查看关联的所有点
GO  FROM "20元的东西" OVER follow BIDIRECT YIELD dst(edge) AS destination;//查全部点
MATCH (v) RETURN v limit 100;//以下是删除所有的边
LOOKUP ON follow YIELD src(edge) AS src, dst(edge) AS dst |   DELETE EDGE follow $-.src -> $-.dst @0;//从一点批量删除边
GO FROM "20元的东西" OVER * BIDIRECT YIELD src(edge) AS src, dst(edge) AS dst | DELETE EDGE follow $-.src -> $-.dst @0;//批量删除点
LOOKUP ON entity YIELD id(vertex)  as id| DELETE VERTEX $-.id;//复合查询
LOOKUP ON entity WHERE entity.name == "20元的东西" YIELD id(vertex) as id | GO  FROM $-.id OVER follow YIELD dst(edge) AS id | GO FROM $-.id OVER follow WHERE properties($$).name == "20元的东西的子节点" YIELD properties($$) as obj;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/14901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙系统与OpenHarmony:中国科技行业的新动力与就业前景

背景 经历近年来的迅猛发展&#xff0c;鸿蒙原生应用数量已突破4000款&#xff0c;生态设备数量超过8亿台&#xff0c;开发者群体壮大至220万人。更为显著的是&#xff0c;鸿蒙系统在中国市场的份额已经超过了15%&#xff0c;稳居第三大操作系统&#xff0c;其生态之树已然枝繁…

探秘机器学习经典:K-近邻算法(KNN)全解析

在浩瀚的机器学习宇宙中,K-近邻算法(K-Nearest Neighbors,简称KNN)如同一颗璀璨的明星,以其简洁直观的原理和广泛的应用范围,赢得了众多数据科学家的喜爱。今天,让我们一起揭开KNN的神秘面纱,深入探讨它的运作机制、优缺点、应用场景,以及如何在实际项目中灵活运用。 …

23. 【Java教程】接口

本小节我们将学习 Java 接口&#xff08;interface&#xff09;&#xff0c;通过本小节的学习&#xff0c;你将了解到什么是接口、为什么需要接口、如何定义和实现接口&#xff0c;以及接口的特点等内容。最后我们也将对比抽象类和接口的区别。 1. 概念 Java 接口是一系列方法的…

PostgreSQL事务基础理解

PostgreSQL事务 事务是数据库管理系统执行过程中的一个逻辑单位&#xff0c;由一个有限的数据库操作序列构成。数据库事务通常包含一个序列对数据库的读和写操作&#xff0c;主要是包含以下两个目的&#xff1a; 为数据库操作序列提供一个从失败中恢复到正常状态的方法&#…

事务管理控制

文章目录 1. 事务的基本概念2. 数据库的并发控制2.1 事务调度2.2 并发操作带来的问题2.3 并发调度的可串行性2.4 并发控制技术2.5 两段锁协议2.6 多粒度封锁协议 3. 数据库的备份与恢复3.1 数据库系统故障3.2 数据库的备份3.3 数据库的恢复 4. 数据库的安全性与完整性4.1 数据库…

VMware虚拟机桥接无线网卡上网(WIFI)

一、打开VM点击【编辑】-【虚拟网络编辑器】 二、点击【桥接模式】- 点击【自动设置】- 选择自己的无线网适配器 - 【确定】 三、开机之后会弹出提示连接网络&#xff0c;就能看见网络已经连上了

网络变压器原理与维修视频

如果你在寻找网络变压器原理与维修方面的视频教程&#xff0c;可以在网上找一些优质的资料进行学习。一些国内外知名的教育和科技资源网站&#xff0c;如B站、优酷、YouTube等&#xff0c;都有涉及网络变压器原理和维修的视频教程&#xff0c;你可以在这些网站上进行搜索。 通常…

智慧之选:开源与闭源大模型的未来探索

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

淘宝订单系统ERP中如何接入平台订单信息?(订单API)

淘宝开放平台中有交易API&#xff0c;里面有各种关于交易的API接口。但是申报应用权限的审核流程严格又漫长。不少公司费时费力的申请后&#xff0c;结果还是没有审批下来。 调用淘宝自定义接口custom&#xff0c;可以实现淘宝开放平台API的调用。技术人员会根据您需要的接口做…

基于SpringBoot的网盘系统设计与实现

第1章 绪论... 1 1.1 研究背景与意义... 1 1.1.1 研究背景... 1 1.1.1 研究意义... 1 1.2 国内外研究现状... 2 1.2.1 国内研究现状... 2 1.2.2 国外研究现状... 3 1.3 论文组织架构... 4 第2章 关键技术介绍... 5 2.1 SpringBoot. 5 2.2 MySQL数据库... 5 2.3 MVC架…

Java进阶学习笔记2——static修饰成员变量

static&#xff1a; 叫静态&#xff0c;可以修饰成员变量、成员方法。 成员变量按照有无static修饰&#xff0c;分为两种&#xff1a; 类变量&#xff1a;有static修饰&#xff0c;属于类&#xff0c;在计算机中只有一份&#xff0c;会被类的全部对象共享。静态成员变量。 实…

【LeetCode】30.串联所有单词的子串

串联所有单词的子串 题目描述&#xff1a; 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["ab","cd",&qu…

基金/证券项目如何进行非交易日数据补全(实战)

一些大数据开发的项目&#xff0c;特别是基金/证券公司的项目&#xff0c;都经常会涉及到交易日与非交易日的概念。 如果要让你对一张交易日跑批的主表&#xff0c;怎么去补全非交易日的数据呢&#xff1f; 在遇到这种情况的时候&#xff0c;我们要去怎么处理&#xff1f;来&…

webSocket+Node+Js实现在线聊天(包含所有代码)

这篇文章主要介绍了如何使用 webSocket、Node 和 Js 实现在线聊天功能。 重要亮点 &#x1f4bb; 技术选型&#xff1a;使用 Node.js 搭建服务器&#xff0c;利用 Express 框架和 Socket.io 库实现 WebSocket 通信。 &#x1f4c4; 实现思路&#xff1a;通过建立数组存储聊天…

掌握RESTful API:从入门到精通,全面解析Web开发的基石!

在现代Web开发中&#xff0c;API&#xff08;应用程序编程接口&#xff09;已经成为不同系统之间通信的重要手段。其中&#xff0c;RESTful API是一种基于HTTP协议的设计风格&#xff0c;它简洁、易用且高效。作为一个资深的技术人员&#xff0c;本文将全面详细地介绍RESTful A…

等保建设:打造MySQL数据库审计系统

1、建设目标 在等级保护三级->应用安全->安全审计中强制需要有审计平台(满足对操作系统、数据库、网络设备的审计&#xff0c;在条件不允许的情况下&#xff0c;至少要使用数据库审计) 数据库审计服务符合等级保护三级标准&#xff0c;帮助您满足合规性要求&#xff0c;…

VsCode CMake调试QT无法查看源码问题处理

遇到的问题 当我们在VsCode使用CMake来调试QT程序时&#xff0c;想F11进入到QT源码时&#xff0c;发现进不去&#xff0c;无法查看源码。 原因 这种情况一般都是安装目录下没有pdb文件导致的。 PDB文件&#xff1a;是一个包含调试信息的数据库&#xff0c;它由编译器和链接器…

用UDP写一个回显服务器和一个字典服务器

回显服务器 操作系统提供了一些网络通信的api&#xff08;socket&#xff09;。 如&#xff1a; 回显服务器&#xff1a;请求是啥&#xff1f;响应就是啥。 一个正常的服务器要做三件事情&#xff1a; 1. 读取请求并解析。 2. 根据请求计算响应。 3. 把响应写回给客户端。…

【ETAS CP AUTOSAR工具链】ARXML文件详解

本篇文章首先对ARXML这种文件格式做了一个概述&#xff0c;叙述了这种标签语言的基本语法&#xff08;如果您用HTML做过网页&#xff0c;那么这种格式您一定不会陌生&#xff09;&#xff0c;然后对ARXML文件都会包含的一些基本信息做了详细的解读&#xff0c;最后基于使用ISOL…

Android:使用Kotlin搭建MVP架构模式

一、简介Android MVP架构模式 MVP全称&#xff1a;Model、View、Presenter&#xff1b; View&#xff1a;负责视图部分展示Model&#xff1a;负责数据的请求、解析、过滤等数据层操作。Presenter&#xff1a;View和Model交互的桥梁。对应MVC中的C&#xff08;controller&#x…