Java实现neo4j数据库连接及增删改查 您所在的位置:网站首页 graphdatabase连接nebulaspringyml Java实现neo4j数据库连接及增删改查

Java实现neo4j数据库连接及增删改查

2024-07-17 01:32| 来源: 网络整理| 查看: 265

天行健,君子以自强不息;地势坤,君子以厚德载物。

每个人都有惰性,但不断学习是好好生活的根本,共勉!

文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。

Java实现neo4j数据连接及增删改查 一、简单连接neo4j数据库1. 依赖引入2. 主方法 二、对neo4j数据库的增删改查1. 项目包结构2. 依赖引入3. yml文件4. 启动类5. 参数文件6. 配置类补:UserNode实体类7. 工具类8. 请求类9. postman测试9.1 创建节点9.1.1 浏览器查看全部节点9.1.2 添加节点9.1.3 postman截图9.1.4 浏览器查看已创建的节点9.1.5 删除全部节点9.1.6 批量创建设备9.1.7 批量创建用户9.1.8 查看新建节点 9.2 查询节点9.2.1 查询全部节点9.2.2 查询指定标签的所有节点9.2.3 查询单个设备节点9.2.4 查询单个用户节点 9.3 修改节点9.3.1 修改用户节点9.3.2 修改设备节点 9.4 删除节点9.4.1 删除用户节点9.4.2 删除设备节点9.4.3 删除全部节点 9.5 创建关系9.5.1 创建两个节点之间的关系9.5.2 创建单用户对多设备的关系9.5.3 创建单设备对应多用户的关系 9.6 查询关系9.6.1 查询用户名下的设备列表9.6.2 查询设备对应的可使用人 9.7 修改关系9.7.1 修改某个用户对某个设备的关系9.7.2 修改指定用户与其名下所有设备的关系9.7.3 修改指定设备与其所有使用人的关系 9.8 删除关系9.8.1 删除指定用户指定设备的关系9.8.2 删除指定用户和其名下所有设备的关系9.8.3 删除指定设备和其可用人的所有关系

可参考文章: neo4j数据库的介绍及基础语法 neo4j数据库语法实例演示

在增删改查之前我们先连接一下数据库并尝试执行命令。如下:

一、简单连接neo4j数据库

创建maven项目,在pom中引入依赖,编写主类运行执行cql语句进行数据库操作

1. 依赖引入

引入neo4j的依赖,pom只需添加此依赖即可

org.neo4j.driver neo4j-java-driver 4.4.9 2. 主方法

在主方法中填入数据库相关参数连接,并执行cql语法命令操作

public static void main( final String[] args ) throws Exception{ //输入你的数据库IP地址和端口、账号和密码 Driver driver = GraphDatabase.driver("bolt://47.101.196.172:7687", AuthTokens.basic("neo4j", "password")); Session session = driver.session(); //创建一个类为User的节点并赋值属性name,name值为李白 session.run("create(u:User {name:\"李白\"})"); session.close(); driver.close(); System.out.println("sssss"); }

我们知道如何连接并知道怎么去操作数据库,接下来就是完整的对数据库连接和增删改查操作。 首先是参数读取数据库的服务器地址账号密码等参数,然后将每个命令封装成一个函数来执行。 如下:

二、对neo4j数据库的增删改查

以下内容是以spring boot项目为基础来操作neo4j数据库,可参考spring boot搭建

1. 项目包结构

在这里插入图片描述

2. 依赖引入

因为需要用到一些工具所以这里除了neo4j外还需要加点别的 完整pom.xml

4.0.0 org.example neo4j 1.0-SNAPSHOT 8 8 UTF-8 spring-boot-starter-parent org.springframework.boot 2.3.4.RELEASE org.springframework.boot spring-boot-starter-web org.projectlombok lombok com.alibaba fastjson 2.0.32 org.neo4j.driver neo4j-java-driver 4.4.9 3. yml文件

application.yml

server: port: 8089 4. 启动类

Neo4jApplication.java

package com.neo4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @ClassDescription: * @Author:李白 * @Date:2023/8/1 14:40 */ @SpringBootApplication public class Neo4jApplication { public static void main(String[] args) { SpringApplication.run(Neo4jApplication.class,args); } } 5. 参数文件

neo4j.properties

neo4j.url=bolt://47.101.196.173:7687 neo4j.username=neo4j neo4j.password=password 6. 配置类

此类就是用来读取数据路参数文件中的参数的 有关文件参数读取可参考properties文件参数读取(@ConfigurationProperties) Neo4jConfig.java

package com.neo4j.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; /** * @ClassDescription: neo4j数据库参数配置类 * @Author:李白 * @Date:2023/7/31 15:57 */ @Data @Component @PropertySource("neo4j.properties") @ConfigurationProperties(prefix = "neo4j") public class Neo4jConfig { private String url; private String username; private String password; } 补:UserNode实体类

UserNode.java

package com.neo4j.entity; import lombok.AllArgsConstructor; import lombok.Data; /** * @ClassDescription: 用户节点信息 * @Author:李白 * @Date:2023/8/1 8:43 */ @Data @AllArgsConstructor public class UserNode { private String userName; private String userGroup; private String email; } 7. 工具类

Neo4jUtils.java

package com.neo4j.utils; import com.alibaba.fastjson.JSONObject; import com.neo4j.config.Neo4jConfig; import org.neo4j.driver.*; import org.springframework.beans.factory.annotation.Autowired; import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; /** * @ClassDescription: * @Author:李白 * @Date:2023/8/3 14:45 */ @Component public class Neo4jUtils { @Autowired Neo4jConfig neo4jCfg; private static Neo4jConfig neo4jConfig; @PostConstruct public void s(){ neo4jConfig = neo4jCfg; } /** * 增删改接口调用(create/delete/set) * @param cql */ public static void cds(String cql){ Driver d = GraphDatabase.driver(neo4jConfig.getUrl(), AuthTokens.basic(neo4jConfig.getUsername(), neo4jConfig.getPassword())); Session s = d.session(); s.run(cql); s.close(); d.close(); } /** * 查询接口调用(match) * @param cql * @return */ public static List m(String cql){ Driver d = GraphDatabase.driver(neo4jConfig.getUrl(), AuthTokens.basic(neo4jConfig.getUsername(), neo4jConfig.getPassword())); Session s = d.session(); Result result = s.run(cql); List list = new ArrayList(); //获取每一个节点 while ( result.hasNext() ) { Record record = result.next(); Map map = record.get("n").asMap(); Set set = map.entrySet(); JSONObject nodeProperties = new JSONObject(); //遍历每个节点中的信息,都是key-value形式的 for(Map.Entry one : set){ nodeProperties.put(one.getKey().toString(),one.getValue()); System.out.print(one.getKey() + "=" + one.getValue() + ";"); } System.out.println(); list.add(nodeProperties); } list.stream().sorted(); System.out.println(list); s.close(); d.close(); return list; } } 8. 请求类

Neo4jController.java

package com.neo4j.controller; import com.alibaba.fastjson.JSONObject; import com.neo4j.entity.UserNode; import com.neo4j.utils.Neo4jUtils; import org.springframework.web.bind.annotation.*; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @ClassDescription: 请求调用-neo4j数据操作 * @Author:李白 * @Date:2023/7/31 8:27 */ @RestController @RequestMapping("/neo4j-part") public class Neo4jController { /** * 新增节点-用户----------------------问题:字符串直接使用需要用反斜杠转义,以变量形式填入则会报错。 */ @PostMapping("/addNode") public void add(@RequestParam("name")String name){ // String name = "libai666"; String cql = "create (u:User {name:\""+name+"\"})"; Neo4jUtils.cds(cql); } /** * ----------------------------------------------------新增节点------------------------------------------------------- */ /** * 新增设备 */ @PostMapping("/addDevice") public void addDevice(){ String deviceGroup = "internal"; //创建二十个设备 for (int i = 1; i String deviceIdPre = "NA000"; String cql = "create (d:Device {deviceId:"+"\""+deviceIdPre+i+"\""+", deviceGroup:"+"\""+deviceGroup+"\""+"})"; Neo4jUtils.cds(cql); }else { String deviceIdPre = "NA00"; String cql = "create (d:Device {deviceId:"+"\""+deviceIdPre+i+"\""+", deviceGroup:"+"\""+deviceGroup+"\""+"})"; Neo4jUtils.cds(cql); } } } /** * 新增用户 */ @PostMapping("/addUser") public void addUser(){ //用户信息 UserNode un1 = new UserNode("李白","唐","[email protected]"); UserNode un2 = new UserNode("杜甫","唐","[email protected]"); UserNode un3 = new UserNode("李信","秦","[email protected]"); UserNode un4 = new UserNode("张飞","蜀","[email protected]"); UserNode un5 = new UserNode("黄忠","蜀","[email protected]"); UserNode un6 = new UserNode("刘备","蜀","[email protected]"); UserNode un7 = new UserNode("赵云","蜀","[email protected]"); UserNode un8 = new UserNode("马超","蜀","[email protected]"); UserNode un9 = new UserNode("关羽","蜀","[email protected]"); List list = new ArrayList(); list.add(un1); list.add(un2); list.add(un3); list.add(un4); list.add(un5); list.add(un6); list.add(un7); list.add(un8); list.add(un9); //创建9个用户 for (int i = 0; i String cql = "match (n) return n"; List m = Neo4jUtils.m(cql); JSONObject listJson = new JSONObject(); listJson.put("allNodes",m); return listJson; } /** * 查询指定标签的所有节点信息 * @param label 标签 * @return */ @GetMapping("/searchLabelNodes") public JSONObject searchLabelNodes(@RequestParam("label")String label){ String cql = "match (n:"+label+") return n"; List m = Neo4jUtils.m(cql); JSONObject listJson = new JSONObject(); listJson.put("labelNodes",m); return listJson; } /** * 查询具体的一个节点信息--查询设备具体节点 * @param deviceId 设备号 * @return */ @GetMapping("/searchOneDevice") public JSONObject searchOneDevice(@RequestParam("deviceId")String deviceId){ String cql = "match (n:Device{deviceId:\""+deviceId+"\"}) return n"; List m = Neo4jUtils.m(cql); JSONObject listJson = new JSONObject(); listJson.put("device",m); return listJson; } /** * 查询具体的一个节点信息--查询设备具体节点 * @param name 用户名 * @return */ @GetMapping("/searchOneUser") public JSONObject searchOneUser(@RequestParam("name")String name){ String cql = "match (n:User{name:\""+name+"\"}) return n"; List m = Neo4jUtils.m(cql); JSONObject listJson = new JSONObject(); listJson.put("user",m); return listJson; } /** * ----------------------------------------------------删除节点------------------------------------------------------- */ /** * 删除全部节点 */ @DeleteMapping("/deleteAllNodes") public void deleteAllNodes(){ String cql = "match(n) delete n"; Neo4jUtils.cds(cql); } /** * 删除同一标签的全部节点 * @param label 标签 */ @DeleteMapping("/deleteLabelAllNodes") public void deleteLabelAllNodes(@RequestParam("label")String label){ String cql = "match(n:"+label+") delete n"; Neo4jUtils.cds(cql); } /** * 删除指定的节点 * @param name 用户名 */ @DeleteMapping("/deleteOneUser") public void deleteOneUser(@RequestParam("name")String name){ String cql = "match(n:User{name:\""+name+"\"}) delete n"; Neo4jUtils.cds(cql); } /** * 删除指定的节点 * @param deviceId 设备号 */ @DeleteMapping("/deleteOneDevice") public void deleteOneDevice(@RequestParam("deviceId")String deviceId){ String cql = "match(n:Device{deviceId:\""+deviceId+"\"}) delete n"; Neo4jUtils.cds(cql); } /** * ----------------------------------------------------修改节点------------------------------------------------------- */ /** * 根据用户名修改用户组和用户邮箱 * @param name 用户名 * @param userGroup 用户组 * @param email 用户邮箱 */ @PutMapping("/updateUser") public void updateUser(@RequestParam("name")String name, @RequestParam("userGroup")String userGroup, @RequestParam("email")String email){ String cql = "match(n:User{name:\""+name+"\"}) set n.userGroup=\""+userGroup+"\",n.email=\""+email+"\""; Neo4jUtils.cds(cql); } /** * 根据deviceId修改设备组 * @param deviceId 设备号 * @param deviceGroup 设备组 */ @PutMapping("/updateDevice") public void updateDevice(@RequestParam("deviceId")String deviceId, @RequestParam("deviceGroup")String deviceGroup){ String cql = "match(n:Device{deviceId:\""+deviceId+"\"}) set n.deviceGroup=\""+deviceGroup+"\""; Neo4jUtils.cds(cql); } /** * ----------------------------------------------------创建关系------------------------------------------------------- */ /** * 创建用户和设备之间的关系 * @param name 用户名 * @param deviceId 设备号 */ @PostMapping("/createR") public void createR(@RequestParam("name")String name, @RequestParam("deviceId")String deviceId){ Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd hhmmss"); String dateStr = sdf.format(date); String cql1 = "match(u:User{name:\""+name+"\"}),(d:Device{deviceId:\""+deviceId+"\"})create (u)-[r:Borrow{date:\""+dateStr+"\"}]->(d)"; Neo4jUtils.cds(cql1); String cql2 = "match(u:User{name:\""+name+"\"}),(d:Device{deviceId:\""+deviceId+"\"})create (u)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有