赞
踩
天行健,君子以自强不息;地势坤,君子以厚德载物。
每个人都有惰性,但不断学习是好好生活的根本,共勉!
文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。
基于上一篇,Java实现对Neo4j数据库的操作
文章链接:https://blog.csdn.net/mo_sss/article/details/132082356
基于上篇文章对neo4j数据库的操作,优化其资源创建和关闭的过程,提高数据处理的效率
其主要部分就是将资源创建放在配置类中,不去关闭资源,这样就会快很多
neo4j数据库参数读取文件neo4j.properties
neo4j.url=bolt://47.101.136.161:7687
neo4j.username=neo4j
neo4j.password=123456
注:数据库地址和账号密码都是假的请根据自己的数据来配置
Neo4jConfig.java
package com.data.config; import lombok.Data; import org.neo4j.driver.AuthTokens; import org.neo4j.driver.Driver; import org.neo4j.driver.GraphDatabase; import org.neo4j.driver.Session; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; /** * @ClassDescription: neo4j数据库参数配置类 * @Author:李白 * @Date:2023/7/31 15:57 */ @Data @Component //@PropertySource("neo4j.yml") @PropertySource("neo4j.properties") @ConfigurationProperties(prefix = "neo4j") public class Neo4jConfig { private String url; private String username; private String password; @Bean public Session neoSession() { Driver driver = GraphDatabase.driver(url, AuthTokens.basic(username, password)); Session session = driver.session(); return session; } }
Neo4jUtil.java
package com.data.utils.neo4j; import com.alibaba.fastjson.JSONObject; import com.data.config.Neo4jConfig; import org.neo4j.driver.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; 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/14 16:01 */ @Component public class Neo4jUtil { @Autowired Session session; private static Session neoSession; @PostConstruct public void s(){ neoSession = session; } /** * 增删改接口调用(create/delete/set) * @param cql */ public static void cds(String cql){ neoSession.run(cql); } /** * 查询接口调用(match) * @param cql * @return */ public static List m(String cql){ Result result = neoSession.run(cql); // System.out.println("result: "+result); List list = new ArrayList(); //获取每一个节点 while ( result.hasNext() ) { Record record = result.next(); // System.out.println("record: "+record.get("n")); // record.get("n"); Map<String, Object> map = record.get("n").asMap(); Set<Entry<String, Object>> 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); // System.out.println("nodeProperties: "+nodeProperties); } list.stream().sorted(); // System.out.println(list); return list; } /** * 检查节点是否存在接口调用 * @param cql * @return */ public static Boolean checkNode(String cql){ Result result = neoSession.run(cql); return result.hasNext(); } }
对数据库的操作,即上篇文章中的代码中的Neo4jUtils换成Neo4jUtil即可
Neo4jController.java
package com.data.neo4j; import com.alibaba.fastjson.JSONObject; import com.data.neo4j.entity.UserNode; import com.data.utils.neo4j.Neo4jUtil; 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("/add") public void add(/*@RequestParam("name")String name*/){ String name = "libai666"; String cql = "create (u:User {name:\""+name+"\", Group:\"internal\", email:\"cx@163.com\"})"; Neo4jUtil.cds(cql); } /** * ----------------------------------------------------新增节点------------------------------------------------------- */ /** * 新增用户 */ @PostMapping("/addDevice") public void addDevice(/*@RequestParam("deviceIdPre")String deviceIdPre*/){ String deviceGroup = "internal"; //创建二十个设备 for (int i = 1; i < 21; i++) { if (i<10){ String deviceIdPre = "UA000"; String cql = "create (d:Device {deviceId:"+"\""+deviceIdPre+i+"\""+", deviceGroup:"+"\""+deviceGroup+"\""+"})"; Neo4jUtil.cds(cql); }else { String deviceIdPre = "UA00"; String cql = "create (d:Device {deviceId:"+"\""+deviceIdPre+i+"\""+", deviceGroup:"+"\""+deviceGroup+"\""+"})"; Neo4jUtils.cds(cql); } } } /** * 新增设备 */ @PostMapping("/addUser") public void addUser(){ //用户信息 UserNode un1 = new UserNode("cx","internal","cx@163.com"); UserNode un2 = new UserNode("zzw","internal","zzw@163.com"); UserNode un3 = new UserNode("cxl","internal","cxl@163.com"); UserNode un4 = new UserNode("ljk","internal","ljk@163.com"); UserNode un5 = new UserNode("bsj","internal","sj@163.com"); UserNode un6 = new UserNode("wzw","internal","wzw@163.com"); UserNode un7 = new UserNode("wgx","internal","wgx@163.com"); UserNode un8 = new UserNode("jxh","internal","jxh@163.com"); UserNode un9 = new UserNode("wt","internal","wt@163.com"); List<UserNode> 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 < list.size(); i++) { UserNode u = list.get(i); String cql = "create (u:User {name:\""+u.getUserName()+"\", userGroup:\""+u.getUserGroup()+"\",email:\""+u.getEmail()+"\"})"; Neo4jUtil.cds(cql); } } /** * ----------------------------------------------------查询节点------------------------------------------------------- */ /** * 查询所有节点信息 * @return */ @GetMapping("/searchAll") public JSONObject searchAll(){ String cql = "match (n) return n"; List m = Neo4jUtil.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 = Neo4jUtil.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 = Neo4jUtil.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 = Neo4jUtil.m(cql); JSONObject listJson = new JSONObject(); listJson.put("user",m); return listJson; } /** * ----------------------------------------------------删除节点------------------------------------------------------- */ /** * 删除全部节点 */ @DeleteMapping("/deleteAllNodes") public void deleteAllNodes(){ String cql = "match(n) delete n"; Neo4jUtil.cds(cql); } /** * 删除同一标签的全部节点 * @param label 标签 */ @DeleteMapping("/deleteLabelAllNodes") public void deleteLabelAllNodes(@RequestParam("label")String label){ String cql = "match(n:"+label+") delete n"; Neo4jUtil.cds(cql); } /** * 删除指定的节点 * @param name 用户名 */ @DeleteMapping("/deleteOneUser") public void deleteOneUser(@RequestParam("name")String name){ String cql = "match(n:User{name:\""+name+"\"}) delete n"; Neo4jUtil.cds(cql); } /** * 删除指定的节点 * @param deviceId 设备号 */ @DeleteMapping("/deleteOneDevice") public void deleteOneDevice(@RequestParam("deviceId")String deviceId){ String cql = "match(n:Device{deviceId:\""+deviceId+"\"}) delete n"; Neo4jUtil.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+"\""; Neo4jUtil.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+"\""; Neo4jUtil.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)"; Neo4jUtil.cds(cql1); String cql2 = "match(u:User{name:\""+name+"\"}),(d:Device{deviceId:\""+deviceId+"\"})create (u)<-[r:Belong{date:\""+dateStr+"\"}]-(d)"; Neo4jUtil.cds(cql2); } /** * ----------------------------------------------------查询关系------------------------------------------------------- */ /** * 查询指定用户名下的借用设备 * @param name 用户名 * @return */ @GetMapping("/searchU2D") public JSONObject searchU2D(@RequestParam("name")String name){ JSONObject u2dJson = new JSONObject(); String cql = "match(u:User{name:\""+name+"\"})-[r:Borrow]->(n) return n"; List m = Neo4jUtil.m(cql); u2dJson.put("u2dList",m); return u2dJson; } /** * 查询指定设备的使用用户列表 * @param deviceId 设备号 * @return */ @GetMapping("/searchD2U") public JSONObject searchD2U(@RequestParam("deviceId")String deviceId){ JSONObject d2uJson = new JSONObject(); String cql = "match(d:Device{deviceId:\""+deviceId+"\"})-[r:Belong]->(n) return n"; List m = Neo4jUtil.m(cql); d2uJson.put("d2uList",m); return d2uJson; } /** * ----------------------------------------------------删除关系------------------------------------------------------- */ /** * 删除指定用户与指定设备的关系 * @param name 用户名 * @param deviceId 设备号 */ @DeleteMapping("/deleteU2DR") public void deleteU2DR(@RequestParam("name")String name, @RequestParam("deviceId")String deviceId){ String cql1 = "match(u:User{name:\""+name+"\"})-[r:Borrow]->(d:Device{deviceId:\""+deviceId+"\"}) delete r"; String cql2 = "match(u:User{name:\""+name+"\"})<-[r:Belong]-(d:Device{deviceId:\""+deviceId+"\"}) delete r"; Neo4jUtil.cds(cql1); Neo4jUtil.cds(cql2); } /** * 删除指定用户与所有设备的关系 * @param name 用户名 */ @DeleteMapping("/deleteU2AllDR") public void deleteU2AllDR(@RequestParam("name")String name){ String cql1 = "match(u:User{name:\""+name+"\"})-[r:Borrow]->(d:Device) delete r"; String cql2 = "match(u:User{name:\""+name+"\"})<-[r:Belong]-(d:Device) delete r"; Neo4jUtil.cds(cql1); Neo4jUtil.cds(cql2); } /** * 删除指定设备与所有用户的关系 * @param deviceId 设备号 */ @DeleteMapping("/deleteD2AllUR") public void deleteD2AllUR(@RequestParam("deviceId")String deviceId){ String cql1 = "match(u:User)-[r:Borrow]->(d:Device{deviceId:\""+deviceId+"\"}) delete r"; String cql2 = "match(u:User)<-[r:Belong]-(d:Device{deviceId:\""+deviceId+"\"}) delete r"; Neo4jUtil.cds(cql1); Neo4jUtil.cds(cql2); } /** * ----------------------------------------------------修改关系------------------------------------------------------- */ /** * 修改指定用户与指定设备的关系 * @param name 用户名 * @param deviceId 设备号 * @param expire 设备借用时间 */ @PutMapping("/updateU2DR") public void updateU2DR(@RequestParam("name")String name, @RequestParam("deviceId")String deviceId, @RequestParam("expire")String expire){ String cql1 = "match(u:User{name:\""+name+"\"})-[r:Borrow]->(d:Device{deviceId:\""+deviceId+"\"}) set r.date=\""+expire+"\""; String cql2 = "match(u:User{name:\""+name+"\"})<-[r:Belong]-(d:Device{deviceId:\""+deviceId+"\"}) set r.date=\""+expire+"\""; Neo4jUtil.cds(cql1); Neo4jUtil.cds(cql2); } /** * 修改指定用户与所有设备的关系 * @param name 用户名 * @param expire 设备借用时间 */ @PutMapping("/updateU2AllDR") public void updateU2AllDR(@RequestParam("name")String name, @RequestParam("expire")String expire){ String cql1 = "match(u:User{name:\""+name+"\"})-[r:Borrow]->(d) set r.date=\""+expire+"\""; String cql2 = "match(u:User{name:\""+name+"\"})<-[r:Belong]-(d) set r.date=\""+expire+"\""; Neo4jUtil.cds(cql1); Neo4jUtil.cds(cql2); } /** * 修改指定设备与所有用户的关系 * @param deviceId 设备号 * @param expire 设备借用时间 */ @PutMapping("/updateD2AllUR") public void updateD2AllUR(@RequestParam("deviceId")String deviceId, @RequestParam("expire")String expire){ String cql1 = "match(u)-[r:Borrow]->(d:Device{deviceId:\""+deviceId+"\"}) set r.date=\""+expire+"\""; String cql2 = "match(u)<-[r:Belong]-(d:Device{deviceId:\""+deviceId+"\"}) set r.date=\""+expire+"\""; Neo4jUtil.cds(cql1); Neo4jUtil.cds(cql2); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。