spring-data-neo4j 4.2.4release文档概要
Neo4j是一种开源的NoSQL图数据库,将数据以图(把一个个实体当作节点,连接节点的边表示节点间的关系)的形式保存,Neo4j也支持ACID事务管理。关系型数据库数据访问采用的是ORM(对象关系映射),而Neo4j数据库采用的是OGM(对象图形映射,Object Graph Mapper)。
与SDN相匹配的jar包版本
使用Spring Data Neo4j 4.2.x版的需求:
JDK1.8及以上版本
Neo4j Graph DataBase 2.3.x及以上版本
Spring Framework 4.3.9RELEASE及以上版本
使用OGM时确保版本在2.1.1+RELEASE
版本控制
Spring Data Neo4j 4.2及以后的版本的配置,更加简便。不需要在配置类中继承Neo4jConfiguration,也不需要定义SessionBean。而是定义SessionFactory和Neo4jTransactionManager的对象bean。连接Neo4j时,SDN创建session(org.neo4j.ogm.session.Session)实例时,需要声明SessionFactory.当SessionFactory被创建,它设置了OGM的元数据,使用它来创建所有的Session,同时packages to scan for domain object 元数据需要提供给SessionFactory的构造函数。,@EnableTransactionManagement是用来申明Neo4jTransactionManager的,配置SDN的事物,配置SessionFactory Bean是为了申明OGM的配置,如下图:
使用JPA代理实现repository的config
声明一个Spring Data JPA的依赖
neo4j应用
neo4j的driver有三种:Embedd(内嵌式),HTTP以及二进制协议Bolt
OGM(Object Graph Mapper)neo4j数据库的节点与java实体建立映射关系
SDN在顶端为OGM提供语法以及代码,建立基于Spring的Neo4j/OGM的应用
添加依赖
spring-data-neo4j
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j</artifactId>
<version>{version}</version>
</dependency>
添加dirver的依赖,三种:embedded-driver,http-driver,bolt-driver
<!-- add this dependency if you want to use the embedded driver -->
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm-embedded-driver</artifactId>
<version>{ogm-version}</version>
</dependency>
<!-- add this dependency if you want to use the HTTP driver -->
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm-http-driver</artifactId>
<version>{ogm-version}</version>
</dependency>
<!-- the neo4j-ogm-test jar provides access to the http and embedded drivers for testing purposes -->
<dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-ogm-test</artifactId> <version>${neo4j-ogm.version}</version> <type>test-jar</type> <scope>test</scope> </dependency>
<dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-kernel</artifactId> <version>${neo4j.version}</version> <type>test-jar</type> </dependency>
<dependency> <groupId>org.neo4j.app</groupId> <artifactId>neo4j-server</artifactId> <version>${neo4j.version}</version> <type>test-jar</type> </dependency>
<dependency> <groupId>org.neo4j.test</groupId> <artifactId>neo4j-harness</artifactId> <version>${neo4j.version}</version> <scope>test</scope> </dependency>
driver的配置,SDN会自动扫描ogn.properties文件,也可以通过java Configuration来配置,其中<driver>对应依赖中申明的driver,<uri>对应对应neo4j数据库链接地址(http://username:password@localhost:7474)如下:
import org.neo4j.ogm.config.Configuration;
@Bean
public Configuration configuration() {
Configuration config = new Configuration();
config .driverConfiguration() .setDriverClassName("org.neo4j.ogm.drivers.<driver>.driver.<driver>Driver") .setURI("<uri>");
return config;
}
@Bean
public SessionFactory sessionFactory() {
return new SessionFactory(configuration(), <packages> );
}
Neo4j OGM支持
OGM将图数据库中的节点和关系与域模型中的对象和引用映射起来,节点与对象实例映射起来,而对象引用与关系映射起来。OGM抽象化了数据库,提供一种方便的方式在图数据库持久化域模型(domain model),并且查询不需要使用低级别的驱动。
Session用于驱动对象图映射框架。所有存储库实现都是由Session驱动的。它跟踪对实体及其关系所做的更改,这样做的好处是,只需要保存修改的部分。
Neo4j Repositories使用
@Repository
public interface PersonRepository extends Neo4jRepository<Person, Long> {}
public class MySpringBean {
@Autowired private PersonRepository repo;
...
} // then you can use the repository as you would any other object
Person michael = repo.save(new Person("Michael", 36));
Person dave = repo.load(123);
long numberOfPeople = repo.count();
Mapping Query Results
public interface MovieRepository extends GraphRepository<Movie> {
@Query("MATCH (movie:Movie)-[r:RATING]\->(), (movie)<-[:ACTS_IN]-(actor:Actor) " + "WHERE movie.id={0} " + "RETURN movie as movie, COLLECT(actor) AS 'cast', AVG(r.stars) AS 'averageRating'")
MovieData getMovieData(String movieId);
@QueryResult
public class MovieData {
Movie movie;
Double averageRating;
Set<Actor> cast;
}
}
Neo4j是一种事务型数据库。对所有与SDN交互的方法标定@Transactional
@Service
class UserManagementImpl implements UserManagement {
private final UserRepository userRepository;
private final RoleRepository roleRepository;
@Autowired
public UserManagementImpl(UserRepository userRepository, RoleRepository roleRepository) {
this.userRepository = userRepository;
this.roleRepository = roleRepository;
}
@Transactional
public void addRoleToAllUsers(String roleName) {
Role role = roleRepository.findByName(roleName);
for (User user : userRepository.findAll()) {
user.addRole(role);
userRepository.save(user);
}
}
Driver Configuration
Annotating Entities
spring-data-neo4j 4.2.4release文档概要的更多相关文章
- Spring Data MongoDB 四:基本文档改动(update)(一)
Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 二:MongoDB加入.删除.改动 一.简单介绍 Spring Data Mo ...
- Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)
Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简单介绍 Spring ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)
一.简单介绍 Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery
一.简介 spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...
- 通过Spring Data Neo4J操作您的图形数据库
在前面的一篇文章<图形数据库Neo4J简介>中,我们已经对其内部所使用的各种机制进行了简单地介绍.而在我们尝试对Neo4J进行大版本升级时,我发现网络上并没有任何成型的样例代码以及简介,而 ...
- spring boot利用swagger和spring doc生成在线和离线文档
参考博客地址: 在线文档:http://blog.didispace.com/springbootswagger2/ 离线文档:http://www.jianshu.com/p/af7a6f29bf4 ...
- Spring DATA Neo4J(一)
Spring DATA Neo4J——简介 Spring Framework提供了一下模块来处理基于Java的应用程序的DAO层 Spring JDBC Spring ORM Spring DATA ...
- 【转】(八)unity4.6Ugui中文教程文档-------概要-UGUI Rich Text
原创至上,移步请戳:(八)unity4.6Ugui中文教程文档-------概要-UGUI Rich Text 7.Rich Text UI元素和文本网格的文本可以合并多个字体样式和大小.对 UI系统 ...
- 【转】(七)unity4.6Ugui中文教程文档-------概要-UGUI Auto Layout
原创至上,移步请戳:(七)unity4.6Ugui中文教程文档-------概要-UGUI Auto Layout 6. Auto Layout Rect Transform布局系统是足够灵活,可以处 ...
随机推荐
- pm2 代替 Supervisor 管理进程
前提 我们在使用 Laravel 的时候不免用到列队来处理任务,而 Laravel 官方文档给出的是 Supervisor 来管理进程和监控.但是我们在使用中有下面几个缺点: Supervisor 单 ...
- Matlab中psf2otf()函数在opencv中的实现
在Matlab中有个psf2otf()函数,可以将小尺寸的点扩散函数,扩大尺寸,并作二维傅里叶变换,opencv中没有这个函数,所以编了这么个函数: /************************ ...
- Mybatis操作数据时出现:java.sql.SQLSyntaxErrorException: Unknown column 'XXX' in 'field list'
这个错误比较重要,而且很常见,故单独进行说明: Mybatis出现:Unknown column 'xxx' in 'field list' 先来看一下程序的内部: dao.addUser(" ...
- Python爬虫学习==>第十二章:使用 Selenium 模拟浏览器抓取淘宝商品美食信息
学习目的: selenium目前版本已经到了3代目,你想加薪,就跟面试官扯这个,你赢了,工资就到位了,加上一个脚本的应用,结局你懂的 正式步骤 需求背景:抓取淘宝美食 Step1:流程分析 搜索关键字 ...
- 亚马逊s3存储: aws cli上传工具速度和各文件大小关系探究
1,背景介绍 公司最近最近统一了存储环境,由ftp文件存储全量转换为ceph存储.有业务组表示以前往ftp文件批量上传30万个文件1.3GB只需要16分钟左右.切换为ceph存储需要1个多小时,也就是 ...
- java 常用jar包方法
1.Mapper3 常用接口 https://blog.csdn.net/fangwenzheng88/article/details/78713091 2.分页 pageHelper
- python 爬虫 requests模块(response常用属性)
response常用属性 content获取的response对象中的二进制(byte)类型的页面数据response.content 返回响应状态码response.status_code 200 ...
- zabbix监控ssl证书过期时间
获取证书过期时间脚本: /etc/zabbix/scripts/check-cert-expire.sh: #!/bin/bash host=$ port=$ end_date=`/usr/bin/o ...
- 多线程--原子操作 Interlocked系列函数
[转]原文地址:http://blog.csdn.net/morewindows/article/details/7429155 线程同步与互斥: 互斥主要指多个线程不能同时访问一个资源,如打印机就是 ...
- spark教程(15)-Streaming
Spark Streaming 是一个分布式数据流处理框架,它可以近乎实时的处理流数据,它易编程,可以处理大量数据,并且能把实时数据与历史数据结合起来处理. Streaming 使得 spark 具有 ...