Spring boot 整合Neo4j 实现动态Cypher
提到spring boot整合Neo4j,一般都会提到spring-data-neo4j,使用类似于jpa的方式,使用entity去maintain,但是如果想要添加动态关系或者动态的node,就算是@Query也是不够用了
使用OGM
其实这个包也被spring-data-neo4j引入了,所以不必要单独引入
import org.neo4j.ogm.session.Session;
import org.neo4j.ogm.session.SessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.neo4j.ogm.model.Result;@Service
public class NodeService {private final Logger log = LoggerFactory.getLogger(NodeService.class);@Autowiredprivate SessionFactory sessionFactory;public Result searchPath(SearchPathDTO searchPathDTO) {String cypher = "MATCH (n:" + searchPathDTO.getFromNode() + "{" + searchPathDTO.getProperity() + ":'"+ searchPathDTO.getValue() + "'}) "+ "CALL apoc.path.subgraphAll(n,{relationshipFilter: '<|>',minLevel: 0,maxLevel: -1}) "+ "YIELD nodes,relationships RETURN nodes, relationships";Session session = sessionFactory.openSession();return session.query(cypher, new HashMap<>(), false);}}
这样以来,就可以动态拼接cypher,更加灵活,可以实现更加复杂的查询了.
优化
这样获取session会有一个问题,就是在使用事务的时候无法统一管理.
优化之后写一个公共Util类,获取session的时候调用这个类,把sessionFactory传进来就可以了
import org.neo4j.ogm.session.Session;
import org.neo4j.ogm.session.SessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.neo4j.transaction.SessionHolder;
import org.springframework.transaction.support.TransactionSynchronizationManager;public class TransactionUtils {private static final Logger log = LoggerFactory.getLogger(TransactionUtils.class);private TransactionUtils() {}public static Session getSession(SessionFactory sessionFactory) {SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.getResource(sessionFactory);if (sessionHolder == null) {log.error("Can not get seesion from spring neo4j sessionHolder, the previously created transaction will be invalidated.");Session session = sessionFactory.openSession();return session;}return sessionHolder.getSession();}
}
Spring boot 整合Neo4j 实现动态Cypher相关推荐
- spring boot整合cxf发布和调用webservice
一.前言 说起web service最近几年restful大行其道,大有取代传统soap web service的趋势,但是一些特有或相对老旧的系统依然使用了传统的soap web service,例 ...
- Spring Boot 整合MyBatis(23)
Spring Boot 整合MyBatis Spring Boot 整合 Druid 引入依赖 配置 application.yml pring Boot 整合 tk.mybatis 引入依赖 配置 ...
- spring boot整合RabbitMQ —— 十分钟急速上手
安装运行rabbitmq 1.docker安装rabbitmq: docker run -it --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq ...
- Spring Boot 整合 RabbitMQ 实现
Spring Boot 整合 RabbitMQ 实现 1. 开发环境搭建 1.1 pom配置 1.2 application.yml配置 2. 消费者模块(springboot-rabbitmq-co ...
- 干货必看|Spring Boot整合MyBatis框架详解
在开发中,我们通常会对数据库的数据进行操作,Sprirng Boot对关系型数据库和非关系型数据库的访问操作都提供了非常好的整合支持.所以今天壹哥就给大家讲解一下,如何在SpringBoot环境中整合 ...
- Spring boot整合jpa Jquery实现三级联动
Spring boot 整合jpa JQuery 实现省,市,区, 三级联动效果 三级联动在很多项目都必不可少,尤其是在付款时,需要选取地址,为了更好的用户体验感,从而出现了三级联动. 实现三级联动的 ...
- Spring Boot 整合 SpringDataNeo4j 并封装工具类解析PathValue
Spring Boot 整合 SpringDataNeo4j 并封装工具类解析PathValue 一.Neo4j 二.Neo4j客户端浏览器 三.maven依赖 四.节点/关系映射 1.NodePer ...
- 【任务篇】Spring Boot 整合 XXL-JOB 实现定时任务
写在最前 之前介绍过[任务篇]Spring Boot 内置定时任务 Spring Task 实现定时任务,这次介绍 XXL-JOB 实现定时任务. XXL-JOB XXL-JOB 是一个分布式任务调度 ...
- Spring Boot整合elasticsearch实现全文检索
文章目录 1.引入 1.1 Luence 1.2 Solr 1.3 ElasticSearch 2. ElasticSearch安装 2.1 云服务器安装 2.1.1. docker安装 2.1.2 ...
最新文章
- 软件测试用python一般用来做什么-Python用来做Web开发的优势有哪些
- Makefile —— 如何在文件内使用变量?
- linux进程调度周期,Linux进程组调度机制学习
- 基于Redis的MQ中间件实现-目录
- Deepin安装Curl的方法
- simulink和psim仿真结果不同_在HFSS进行AC耦合电容仿真优化怎么做?
- 30岁程序员吐槽:一分钟只能赚3.3元,混得太差!算出月薪后我服了
- python的csv标准库,Python标准库: csv模块——CSV文件的读写
- 数据科学 IPython 笔记本 7.11 聚合和分组
- 奥特曼传奇英雄存档丢了怎么找回_热血传奇:法师前期跨级刷怪到底划不划算?...
- 玩转 Spring Boot 集成篇(Actuator、Spring Boot Admin)
- c# rar解压大小_C# 利用WinRAR (加密)压缩及解压缩
- 显卡识别为Microsoft基本显示适配器,安装9700k核芯显卡HD630驱动或安装其他核显驱动
- 什么是“network”?
- 2021年氧化工艺报名考试及氧化工艺模拟试题
- 数字信号和模拟信号抗干扰能力分析
- 英语绕口令大全 练习你的口语
- Netease Music Spider
- jmete-jp@gc - Throughput Shaping Timer的使用
- 亚马逊第3条规定怎么申诉?亚马逊违反商品政策申诉