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 ...
随机推荐
- 转: PHP中this,self,parent的区别
{一}PHP中this,self,parent的区别之一this篇 面向对象编程(OOP,Object OrientedProgramming)现已经成为编程人员的一项基本技能.利用OOP的思想进行P ...
- MySQL 10章_视图、事务
一. 视图: 视图(view)是保存了查询语句的一种数据库对象,其数据来源是查询语句对应的数据表,他的结果与数据表查询的结果一样也是一张虚拟的数据表 . 为什么需要视图: ) 不同的用户关心的数据可能 ...
- C 自己实现strcpy,strcmp,strlen,strcat等函数
// mystrlen() 测试字符长度方法 int mystrlen(char *str) { int cnt = 0; char *p= str; while(*p++ != '\0') { cn ...
- 【学术篇】SDOI2008 山贼集团
今天一月一号.. 突然想安利一波我的中二的2017总结... 传送门1:codevs 传送门2:luogu 时限5s和1s的区别(你没看我传送门都给的大牛分站了) 现在不仅线筛.. 有负数的快读都打不 ...
- 云-腾讯云-实时音视频:实时音视频(TRTC)
ylbtech-云-腾讯云-实时音视频:实时音视频(TRTC) 支持跨终端.全平台之间互通,从零开始快速搭建实时音视频通信平台 1.返回顶部 1. 腾讯实时音视频(Tencent Real-Time ...
- System.Web.Mvc.IActionFilter.cs
ylbtech-System.Web.Mvc.IActionFilter.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Publ ...
- Vuex听说很难?
Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件状态,并以相应的规则保证状态以一种可预测的方式发生变化. 什么鬼东西 看完这段 ...
- maven项目引入外部第三方jar包,引入、本地编译、第三方jar一起打到jar中、在linux机器中解决classnotfound(配置classpath),笔记整理。
文章目录 引用的第三方jar的目录结构(示例) 引入第三方jar进行dependency使项目内能import 本地编译 第三方jar一起打到jar中 在linux机器中解决classnotfound ...
- 基于token的验证
认证.权限和限制 身份验证是将传入请求与一组标识凭据(例如请求来自的用户或其签名的令牌)相关联的机制.然后 权限 和 限制 组件决定是否拒绝这个请求. 简单来说就是: 认证确定了你是谁 权限确定你能不 ...
- 小程序开发之wepy框架
ps 本教程使用wepy 1.7+以上的版本 wepy-让小程序支持组件化开发的框架 鹅厂出品,用于开发自家产品的框架还是很良心的,框架设计思路上参照vue,但不是全部照搬,这点要注意. 对微信小程序 ...