HugeGraph 【图数据库】JAVA调用SDK

1.引入依赖

  <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>28.0-jre</version> </dependency><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.3</version> </dependency><dependency><groupId>org.apache.hugegraph</groupId><artifactId>hugegraph-client</artifactId><version>1.5.0</version></dependency>

2.引入依赖

import com.sws.link.common.api.dto.R;
import lombok.extern.slf4j.Slf4j;
import org.apache.hugegraph.driver.GraphManager;
import org.apache.hugegraph.driver.GremlinManager;
import org.apache.hugegraph.driver.HugeClient;
import org.apache.hugegraph.driver.SchemaManager;
import org.apache.hugegraph.structure.constant.T;
import org.apache.hugegraph.structure.graph.Edge;
import org.apache.hugegraph.structure.graph.Path;
import org.apache.hugegraph.structure.graph.Vertex;
import org.apache.hugegraph.structure.gremlin.Result;
import org.apache.hugegraph.structure.gremlin.ResultSet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;  // 使用Spring的JdbcTemplate
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;@RestController
@RequestMapping("/api")
@Slf4j
public class TestController {//    public static void main(String[] args) throws IOException {
//        // 连接HugeGraph服务器
//        HugeClient hugeClient = HugeClient.builder("http://192.168.44.135:8080",
//                        "hugegraph")
//                .build();
//
//        SchemaManager schema = hugeClient.schema();
//
//
//        // 创建属性键
//        schema.propertyKey("名称").asText().ifNotExist().create();
//        schema.propertyKey("人口").asInt().ifNotExist().create();
//        schema.propertyKey("面积").asDouble().ifNotExist().create();
//        schema.propertyKey("建成年份").asInt().ifNotExist().create();
//        schema.propertyKey("库容量").asDouble().ifNotExist().create();
//        schema.propertyKey("级别").asText().ifNotExist().create(); // 省级、市级等
//        schema.propertyKey("所属流域").asText().ifNotExist().create();
//        schema.propertyKey("管辖关系").asText().ifNotExist().create(); // 完全管辖、部分管辖等
//        schema.propertyKey("建设时间").asDate().ifNotExist().create();
//        schema.propertyKey("边界长度").asDouble().ifNotExist().create(); // 新增这一行
//
//        // 创建顶点标签:行政区划
//        schema.vertexLabel("行政区划")
//                .properties("名称", "人口", "面积", "级别")
//                .primaryKeys("名称")
//                .ifNotExist()
//                .create();
//
//        // 创建顶点标签:水库
//        schema.vertexLabel("水库")
//                .properties("名称", "建成年份", "库容量", "所属流域")
//                .primaryKeys("名称")
//                .ifNotExist()
//                .create();
//
//        // 创建索引
//        schema.indexLabel("行政区划按级别")
//                .onV("行政区划")
//                .by("级别")
//                .secondary()
//                .ifNotExist()
//                .create();
//
//        schema.indexLabel("水库按流域")
//                .onV("水库")
//                .by("所属流域")
//                .secondary()
//                .ifNotExist()
//                .create();
//
//        schema.indexLabel("水库按库容量")
//                .onV("水库")
//                .by("库容量")
//                .range()
//                .ifNotExist()
//                .create();
//
//        // 创建边标签:包含(行政区划包含水库)
//        schema.edgeLabel("包含")
//                .sourceLabel("行政区划")
//                .targetLabel("水库")
//                .properties("管辖关系", "建设时间")
//                .ifNotExist()
//                .create();
//
//        // 创建边标签:相邻(行政区划之间相邻)
//        schema.edgeLabel("相邻")
//                .sourceLabel("行政区划")
//                .targetLabel("行政区划")
//                .properties("边界长度")
//                .ifNotExist()
//                .create();
//
//        // 创建边上的索引
//        schema.indexLabel("包含关系按管辖类型")
//                .onE("包含")
//                .by("管辖关系")
//                .secondary()
//                .ifNotExist()
//                .create();
//
//        // 添加顶点数据
//        GraphManager graph = hugeClient.graph();
//
//        // 行政区划顶点
//        Vertex 北京市 = graph.addVertex(T.LABEL, "行政区划", "名称", "北京市",
//                "人口", 2154, "面积", 16410.54, "级别", "直辖市");
//        Vertex 河北省 = graph.addVertex(T.LABEL, "行政区划", "名称", "河北省",
//                "人口", 7556, "面积", 188800, "级别", "省级");
//        Vertex 河南省 = graph.addVertex(T.LABEL, "行政区划", "名称", "河南省",
//                "人口", 9605, "面积", 167000, "级别", "省级");
//        Vertex 湖北省 = graph.addVertex(T.LABEL, "行政区划", "名称", "湖北省",
//                "人口", 5917, "面积", 185900, "级别", "省级");
//
//        // 水库顶点
//        Vertex 密云水库 = graph.addVertex(T.LABEL, "水库", "名称", "密云水库",
//                "建成年份", 1960, "库容量", 43.75, "所属流域", "潮白河");
//        Vertex 官厅水库 = graph.addVertex(T.LABEL, "水库", "名称", "官厅水库",
//                "建成年份", 1954, "库容量", 41.6, "所属流域", "永定河");
//        Vertex 丹江口水库 = graph.addVertex(T.LABEL, "水库", "名称", "丹江口水库",
//                "建成年份", 1973, "库容量", 290.5, "所属流域", "汉江");
//
//        // 添加边关系
//        北京市.addEdge("包含", 密云水库, "管辖关系", "完全管辖", "建设时间", "1958-09-01");
//        北京市.addEdge("包含", 官厅水库, "管辖关系", "部分管辖", "建设时间", "1951-10-01");
//        河北省.addEdge("包含", 官厅水库, "管辖关系", "部分管辖", "建设时间", "1951-10-01");
//        河南省.addEdge("包含", 丹江口水库, "管辖关系", "部分管辖", "建设时间", "1958-09-01");
//        湖北省.addEdge("包含", 丹江口水库, "管辖关系", "部分管辖", "建设时间", "1958-09-01");
//
//        北京市.addEdge("相邻", 河北省, "边界长度", 1200.0);
//        河北省.addEdge("相邻", 河南省, "边界长度", 500.0);
//        河南省.addEdge("相邻", 湖北省, "边界长度", 600.0);
//
//        // 执行Gremlin查询并输出结果
//        GremlinManager gremlin = hugeClient.gremlin();
//        System.out.println("==== 路径查询结果 ====");
//        ResultSet resultSet = gremlin.gremlin("g.V().outE().path()").execute();
//        Iterator<Result> results = resultSet.iterator();
//
//        results.forEachRemaining(result -> {
//            Object object = result.getObject();
//            if (object instanceof Path) {
//                List<Object> elements = ((Path) object).objects();
//                elements.forEach(element -> {
//                    if (element instanceof Vertex) {
//                        Vertex v = (Vertex) element;
//                        System.out.println("顶点: " + v.property("名称"));
//                    } else if (element instanceof Edge) {
//                        Edge e = (Edge) element;
//                        System.out.println("边: " + e.label() + " - " + e.property("管辖关系"));
//                    }
//                });
//                System.out.println("-----");
//            }
//        });
//
//        hugeClient.close();
//    }public static void main(String[] args) {// 连接HugeGraph服务器HugeClient hugeClient = HugeClient.builder("http://192.168.44.135:8080","hugegraph").build();SchemaManager schema = hugeClient.schema();// 定义属性键schema.propertyKey("名称").asText().ifNotExist().create();schema.propertyKey("人口").asInt().ifNotExist().create();schema.propertyKey("面积").asDouble().ifNotExist().create();schema.propertyKey("级别").asText().ifNotExist().create();schema.propertyKey("建成年份").asInt().ifNotExist().create();schema.propertyKey("库容量").asDouble().ifNotExist().create();schema.propertyKey("所属流域").asText().ifNotExist().create();schema.propertyKey("管辖关系").asText().ifNotExist().create();schema.propertyKey("建设时间").asDate().ifNotExist().create();schema.propertyKey("边界长度").asDouble().ifNotExist().create();schema.propertyKey("邮政编码").asText().ifNotExist().create(); // 创建行政区划顶点标签schema.vertexLabel("行政区划").properties("名称", "人口", "面积", "级别").primaryKeys("名称").ifNotExist().create();// 为行政区划追加可选属性(示例)schema.vertexLabel("行政区划").properties("邮政编码").nullableKeys("邮政编码").append();// 创建水库顶点标签schema.vertexLabel("水库").properties("名称", "建成年份", "库容量", "所属流域").primaryKeys("名称").ifNotExist().create();// 创建索引schema.indexLabel("水库按库容量").onV("水库").by("库容量").range().ifNotExist().create();schema.indexLabel("行政区划按级别").onV("行政区划").by("级别").secondary().ifNotExist().create();// 创建边标签schema.edgeLabel("包含").link("行政区划", "水库").properties("管辖关系", "建设时间").ifNotExist().create();schema.edgeLabel("相邻").link("行政区划", "行政区划").properties("边界长度").ifNotExist().create();// 创建边上的索引schema.indexLabel("包含关系按建设时间").onE("包含").by("建设时间").secondary().ifNotExist().create();// 打印schema信息System.out.println("属性键: " + schema.getPropertyKey("名称"));System.out.println("顶点标签: " + schema.getVertexLabel("行政区划"));System.out.println("边标签: " + schema.getEdgeLabel("包含"));System.out.println("索引: " + schema.getIndexLabel("水库按库容量"));// 批量创建顶点GraphManager graph = hugeClient.graph();// 准备行政区划顶点Vertex bejing = new Vertex("行政区划").property("名称", "北京市").property("人口", 2154).property("面积", 16410.54).property("级别", "直辖市");Vertex hebei = new Vertex("行政区划").property("名称", "河北省").property("人口", 7556).property("面积", 188800).property("级别", "省级");Vertex henan = new Vertex("行政区划").property("名称", "河南省").property("人口", 9605).property("面积", 167000).property("级别", "省级");// 准备水库顶点Vertex mima = new Vertex("水库").property("名称", "密云水库").property("建成年份", 1960).property("库容量", 43.75).property("所属流域", "潮白河");Vertex guantingshuiku = new Vertex("水库").property("名称", "官厅水库").property("建成年份", 1954).property("库容量", 41.6).property("所属流域", "永定河");Vertex danjiangkoushuiku = new Vertex("水库").property("名称", "丹江口水库").property("建成年份", 1973).property("库容量", 290.5).property("所属流域", "汉江");// 批量添加顶点List<Vertex> vertices = new ArrayList<>();vertices.add(bejing);vertices.add(hebei);vertices.add(henan);vertices.add(mima);vertices.add(guantingshuiku);vertices.add(danjiangkoushuiku);vertices = graph.addVertices(vertices);System.out.println("已添加顶点:");vertices.forEach(vertex -> System.out.println(vertex.property("名称")));// 批量创建边Edge 北京包含密云 = new Edge("包含").source(bejing).target(mima).property("管辖关系", "完全管辖").property("建设时间", "1958-09-01");Edge 北京包含官厅 = new Edge("包含").source(bejing).target(guantingshuiku).property("管辖关系", "部分管辖").property("建设时间", "1951-10-01");Edge 河北包含官厅 = new Edge("包含").source(hebei).target(guantingshuiku).property("管辖关系", "部分管辖").property("建设时间", "1951-10-01");Edge 北京相邻河北 = new Edge("相邻").source(bejing).target(hebei).property("边界长度", 1200.0);Edge 河北相邻河南 = new Edge("相邻").source(hebei).target(henan).property("边界长度", 500.0);// 批量添加边List<Edge> edges = new ArrayList<>();edges.add(北京包含密云);edges.add(北京包含官厅);edges.add(河北包含官厅);edges.add(北京相邻河北);edges.add(河北相邻河南);edges = graph.addEdges(edges, false);System.out.println("已添加边:");hugeClient.close();}
}

3.效果展示

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

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

相关文章

软考中级【网络工程师】第6版教材 第2章 数据通信基础(中)

考点分析&#xff1a;重要程度&#xff1a;⭐⭐⭐&#xff0c;本章可能是全书最难的章节&#xff0c;偏理论&#xff0c;公式多除了传输介质&#xff0c;其他知识点只考选择题&#xff0c;考试一般占3 ~ 5分高频考点&#xff1a;PCM、奈奎斯特定理、曼彻斯特编码&#xff1b;难…

单片机(STM32-中断)

一、中断基础知识 1.概念 中断&#xff08;Interrupt&#xff09;是一种特殊的事件处理机制。当CPU正在执行主程序时&#xff0c;如果出现了某些紧急或重要的事件&#xff08;如外设请求、定时器溢出等&#xff09;&#xff0c;可以暂时中止当前的程序&#xff0c;转而去处理…

gitlab-ci.yml

.gitlab-ci.yml 文件的位置 该文件应放置在 GitLab 项目的代码仓库的根目录 下&#xff0c;具体说明如下&#xff1a;存储库根目录 .gitlab-ci.yml 是 GitLab 持续集成&#xff08;CI&#xff09;的配置文件&#xff0c;需直接放在项目的代码仓库的根目录&#xff08;与 .git 目…

使用JS编写一个购物车界面

使用JS编写一个购物车界面 今天我们来剖析一个精心设计的家具商店购物车页面&#xff0c;这个页面不仅美观大方&#xff0c;还具备丰富的交互功能。让我们一步步拆解它的设计理念和技术实现&#xff01; 页面展示 页面整体结构 这个购物车页面采用了经典的电商布局模式&…

零信任安全架构:如何在云环境中重构网络边界?

一、云原生时代&#xff1a;传统防火墙为何轰然倒塌&#xff1f; 当业务碎片化散落在AWS、阿里云、私有IDC&#xff0c;当员工随手在咖啡厅WiFi连接生产数据库&#xff0c;“内网可信”的基石瞬间崩塌&#xff0c;传统防火墙彻底沦为马奇诺防线&#xff1a; 边界消亡&#xff1…

css实现烧香效果

效果&#xff1a;代码&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>动态香烛效果&…

硬件产品的技术资料管控是确保研发可追溯、生产可复制、质量可控制的核心环节。

硬件产品的技术资料管控是确保研发可追溯、生产可复制、质量可控制的核心环节。以下针对BOM单、PCB文件、程序代码、原理图四大核心要素&#xff0c;结合行业实践提出管控方向划分及优化策略&#xff1a;&#x1f4cb; 一、硬件BOM单的精细化管控方向BOM单是硬件生产的“配方表…

Uniswap V2/V3/V4简短说明

Uniswap 是以太坊上最知名的去中心化交易所&#xff08;DEX&#xff09;&#xff0c;它通过不同的版本&#xff08;V2、V3、V4&#xff09;不断改进&#xff0c;变得更高效、更灵活。以下是用通俗易懂的方式介绍它们之间的异同&#xff1a; Uniswap V2&#xff1a;基础版&#…

C++面向对象创建打印算术表达式树

C面向对象&#xff0c;实现算术表达式树的创建和打印的案例&#xff0c;来源于《C沉思录》第八章&#xff0c;涉及数据抽象、继承、多态&#xff08;动态绑定&#xff09;、句柄&#xff0c;其中句柄的使用是核心&#xff0c;关于句柄的较为简单的文章链接点击这里&#xff0c;…

力扣每日一题--2025.7.16

&#x1f4da; 力扣每日一题–2025.7.16 &#x1f4da; 3201. 找出有效子序列的最大长度 I&#xff08;中等&#xff09; 今天我们要解决的是力扣上的第 3201 题——找出有效子序列的最大长度 I。这道题虽然标记为中等难度&#xff0c;但只要掌握了正确的思路&#xff0c;就能…

SFT:大型语言模型专业化定制的核心技术体系——原理、创新与应用全景

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01; 以下基于权威期刊、会议论文及技术报告&#xff0c;对监督微调&#x…

若依前后端分离框架配置多数据库表

若依前后端分离框架配置多数据库表1、配置application.yml2、注释掉application-druid.yml中的数据库3、在DataSourceType 中添加新增的数据库来源4、配置DruidConfig文件4、1新增注入方法&#xff0c;在DataSourceType类添加数据源枚举4、2在DruidConfig类dataSource方法添加数…

29.安卓逆向2-frida hook技术-逆向os文件(二)IDA工具下载和使用(利用ai分析so代码)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取码&#xff1…

[析]Deep reinforcement learning for drone navigation using sensor data

Deep reinforcement learning for drone navigation using sensor data 基于传感器数据的无人机导航深度强化学习方法 评价&#xff1a;MDP无记忆性&#xff0c;使用LSTM补足缺点。PPO解决新旧策略差距大的问题。 对于环境中的障碍物&#xff0c;设置增量课程&#xff0c;障碍…

SpringBoot项目启动报:java: 找不到符号 符号: 变量 log 的解决办法

问题&#xff1a;使用IDEA创建SpringBoot项目&#xff0c;在项目中使用 Slf4j 注解引入log日志后&#xff0c;启动项目&#xff0c;报如下错误&#xff1a;原因&#xff1a;网上找了很多博文&#xff0c;说是lombook依赖没有引入&#xff0c;但是我的pom.xml中已经引入 lombook…

HTML基础知识 二(创建容器和表格)

HTML 基础知识&#xff1a;创建容器和表格&#xff08;补充版&#xff09;HTML&#xff08;超文本标记语言&#xff09;是构建网页的基础。容器元素用于组织内容&#xff0c;表格用于展示结构化数据&#xff0c;两者都是网页设计中不可或缺的部分。一、HTML 容器元素容器元素就…

多目标优化|HKELM混合核极限学习机+NSGAII算法工艺参数优化、工程设计优化,四目标(最大化输出y1、最小化输出y2,y3,y4),Matlab完整源码

基本介绍 1.HKELM混合核极限学习机NSGAII多目标优化算法&#xff0c;工艺参数优化、工程设计优化&#xff01;&#xff08;Matlab完整源码和数据&#xff09; 多目标优化是指在优化问题中同时考虑多个目标的优化过程。在多目标优化中&#xff0c;通常存在多个冲突的目标&#x…

【AI智能体】Dify 基于知识库搭建智能客服问答应用详解

目录 一、前言 二、Dify 介绍 2.1 Dify 核心特点 三、AI智能体构建智能客服系统介绍 3.1 基于AI智能体平台搭建智能客服系统流程 3.1.1 需求分析与场景设计 3.1.2 选择合适的AI智能体平台 3.1.3 工作流编排与调试 3.1.4 系统集成与发布 3.2 使用AI智能体构建智能客服系…

事务~~~

1、四大特性&#xff1a;A 原子性&#xff1a;对数据的一组操作&#xff0c;要么执行成功&#xff0c;要么不执行C 一致性&#xff1a;事务前后的状态要保持一致&#xff0c;可以理解为数据的一致性I 隔离性&#xff1a;多个事务之间是隔离的&#xff0c;互不影响D 持久性&…

【Linux编译】./build.sh: line 17: $‘\r‘: command not found

文章目录0.运行编译脚本遇到问题&#xff1a;方法 1&#xff1a;使用 dos2unix&#xff08;推荐&#xff09;1. 安装 dos2unix2. 递归转换整个目录方法 2&#xff1a;使用 sed&#xff08;无需安装额外工具&#xff09;方法 3&#xff1a;使用 tr&#xff08;仅单文件&#xff…