Neo4j与springdata集成
1、maven工程需导入的jar包
<!-- neo4j -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j</artifactId>
<version>4.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.neo4j.app</groupId>
<artifactId>neo4j-server</artifactId>
<version>2.3.2</version>
</dependency>
2、对应spring的jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
3、加载neo4j的驱动配置

@Configuration
@EnableNeo4jRepositories("com.neo4j.repository")
@EnableTransactionManagement public class Neo4jApplication extends Neo4jConfiguration {</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">final</span> <span style="color: #0000ff;">int</span> NEO4J_PORT = 7474<span style="color: #000000;">; @Bean
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> SessionFactory getSessionFactory() {
</span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">new</span> SessionFactory("com.neo4j.domain"<span style="color: #000000;">);
}
//配置事务
@Bean
@Qualifier("neo4jTransactionManager")
public Neo4jTransactionManager neo4jTransactionManager() throws Exception {
return new Neo4jTransactionManager(getSession());
}}

4、连接方式采用httpDriver
添加配置文件ogm.properties
driver=org.neo4j.ogm.drivers.http.driver.HttpDriver
URI=http://neo4j:admin@localhost:7474
5、domain实体配置

//节点注解(可以添加label标签)
@NodeEntity
public class Thing{
//neo4j中节点的ID
private Long id;</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Long getId() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> id;
} @Override
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">boolean</span><span style="color: #000000;"> equals(Object o) {
</span><span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">this</span> ==<span style="color: #000000;"> o)
</span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">if</span> (o == <span style="color: #0000ff;">null</span> || id == <span style="color: #0000ff;">null</span> || getClass() !=<span style="color: #000000;"> o.getClass())
</span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;
Entity entity </span>=<span style="color: #000000;"> (Entity) o;
</span><span style="color: #0000ff;">if</span> (!<span style="color: #000000;">id.equals(entity.id))
</span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;
} @Override
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span><span style="color: #000000;"> hashCode() {
</span><span style="color: #0000ff;">return</span> (id == <span style="color: #0000ff;">null</span>) ? -1<span style="color: #000000;"> : id.hashCode();
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">属性</span>
<span style="color: #0000ff;">private</span><span style="color: #000000;"> String userId; </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String name; </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String desc;
</span><span style="color: #008000;">//</span><span style="color: #008000;">配置转换</span>
@DateString("yy-MM-dd"<span style="color: #000000;">)
</span><span style="color: #0000ff;">private</span><span style="color: #000000;"> Date dateTime;
</span><span style="color: #008000;">//</span><span style="color: #008000;">设置关系</span>
@Relationship(type = "HAVE_PROP", direction=<span style="color: #000000;">Relationship.OUTGOING)
List</span><Property> properties = <span style="color: #0000ff;">new</span> ArrayList<Property><span style="color: #000000;">(); @Relationship(type </span>= "HAVE_SERVICE", direction=<span style="color: #000000;">Relationship.OUTGOING)
Set</span><Service> services = <span style="color: #0000ff;">new</span> HashSet<Service><span style="color: #000000;">(); @Relationship(type </span>= "HAVE_PROP"<span style="color: #000000;">)
Set</span><ThingPropRelation> propRelations = <span style="color: #0000ff;">new</span> HashSet<ThingPropRelation><span style="color: #000000;">(); @Relationship(type </span>= "HAVE_SERVICE"<span style="color: #000000;">)
Set</span><ThingServiceRelation> serviceRelations = <span style="color: #0000ff;">new</span> HashSet<ThingServiceRelation><span style="color: #000000;">(); @Relationship(type </span>= "HAVE_SERVICE"<span style="color: #000000;">)
Set</span><ThingServiceRelation> serviceRelations = <span style="color: #0000ff;">new</span> HashSet<ThingServiceRelation><span style="color: #000000;">();
}

设置节点的关系

//设置关系实体
@RelationshipEntity(type="HAVE_PROP")
public class ThingPropRelation extends Entity {
//开始节点
@StartNode
Thing thing;
//结束节点
@EndNode
Property property;</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> ThingPropRelation() {
} </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Thing getThing() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> thing;
} </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setThing(Thing thing) {
</span><span style="color: #0000ff;">this</span>.thing =<span style="color: #000000;"> thing;
} </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Property getProperty() {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> property;
} </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setProperty(Property property) {
</span><span style="color: #0000ff;">this</span>.property =<span style="color: #000000;"> property;
}
}

6、设置repository

//接口继承GraphRepository
//提供基础的保存修改删除查询功能
//特殊查询可以通过@Query注解实现
public interface ThingRepository extends GraphRepository<Thing> {
Thing findByName(String name);@Query(</span>"MATCH (t:Thing {name:{0}})-[r:HAVE_PROP]->(p) RETURN p"<span style="color: #000000;">)
Iterable</span><Property><span style="color: #000000;"> getThingPropertyByThingName(String thingName);
}

7、应用
@Autowired
private ThingRepository thingRepository;
调用
Thing thing = thingRepository.findByName("thing");
原文地址:https://www.cnblogs.com/changj/p/6021775.html
Neo4j与springdata集成的更多相关文章
- Neo4J空间数据存储
1.Neo4j Spatial 简介 1.1Neo4j Spatial概念 Neo4j Spatial项目是图数据库Neo4j的一个插件,它通过将空间数据映射到图模型(graph model),它将对 ...
- Neo4j Desktop 管理工具的安装和应用
安装和启动Neo4j桌面 如果您还没有,请下载 Neo4j.使用提供的说明(下载时显示),按照步骤1安装并启动Neo4j Desktop应用程序.下载页面上的步骤2说明向您展示了如何设置您的第一个项目 ...
- ElasticSearch 安装, 带视频
疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] 疯狂创客圈 高并 ...
- mongodb重点知识总结
Mongodb总结 一.NoSQL型数据库介绍 NoSQL,泛指非关系型的数据库.NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题.NoSQL(NoSQL ...
- ElasticSearch集成SpringData史上最全查询教程
1.简单介绍 springboot 使用springdata操作es,ElasticsearchRepository使用QueryBuilder构造查询条件 2.集成es //maven集成 < ...
- 图数据库Neo4j的基本使用及与SpringBoot集成
Neo4j 官网地址:https://neo4j.com/ 下载地址:https://neo4j.com/download-center/#community 官方入门文档:https://neo4j ...
- Neo4j在linux上的安装与Springboot的集成
Neo4j在linux上的安装与Springboot的集成 在linux安装: 前提:安装配置好java环境 1.下载neo4j 官方社区版下载地址:https://neo4j.com/downloa ...
- Springboot集成SpringData JPA
序 StringData JPA 是微服务框架下一款ORM框架,在微服务体系架构下,数据持久化框架,主要为SpringData JPA及Mybatis两种,这两者的具体比较,本文不做阐述,本文只简单阐 ...
- Spring boot项目集成Neo4j
第一步,创建Springboot工程 使用Eclipse 创建Maven项目,并修改pom.xml文件为: <?xml version="1.0" encoding=&quo ...
随机推荐
- java 多项式
/****************************************************************************** * Compilation: javac ...
- PHP算法之整数转罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1.12 ...
- 通讯录查询(Profile Lookup)——freeCodeCamp
- 十一. for of
const fruits = ['Apple','Banana','Orange','Mango']; es5: 可读性差 for(let i=0; i < fruits.length; i + ...
- redis笔记_源码_简单动态字符串SDS
参照:https://zcheng.ren/sourcecodeanalysis/theannotatedredissourcesds/#sds%E5%B0%8F%E7%BB%93 这里用char b ...
- 阿里云 Aliplayer高级功能介绍(三):多字幕
基本介绍 国际化场景下面,播放器支持多字幕,可以有效解决视频的传播障碍难题,该功能适用于视频内容在全球范围内推广,阿里云的媒体处理服务提供接口可以生成多字幕,现在先看一下具体的效果: WebVTT格式 ...
- thinkphp DEFINE标签
DEFINE标签用于中模板中定义常量,用法如下: 直线电机厂家 <define name="MY_DEFINE_NAME" value="3" /> ...
- MFC基础类及其层次结构
从类CCmdTarget派生出绝大多数MFC中的类,其层次结构如下图: 从根类Cobject层层派生出绝大多数MFC中的类,层次结构如下图: MFC中重点类: CObject类是MFC的绝大部分类的基 ...
- Codeforces-GYM101873 G Water Testing 皮克定理
题意: 给定一个多边形,这个多边形的点都在格点上,问你这个多边形里面包含了几个格点. 题解: 对于格点多边形有一个非常有趣的定理: 多边形的面积S,内部的格点数a和边界上的格点数b,满足如下结论: 2 ...
- 驱动层hook系统函数的时,如何屏蔽掉只读属性?
对于Intel 80486或以上的CPU,CR0的位16是写保护(Write Proctect)标志.当设置该标志时,处理器会禁止超级用户程序(例如特权级0的程序)向只读页面执行写操作:当该位复位时则 ...