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文档概要的更多相关文章

  1. Spring Data MongoDB 四:基本文档改动(update)(一)

    Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 二:MongoDB加入.删除.改动 一.简单介绍 Spring Data  Mo ...

  2. Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)

    Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简单介绍 Spring ...

  3. Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)

    一.简单介绍 Spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...

  4. Spring Data MongoDB 三:基本文档查询(Query、BasicQuery

    一.简介 spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...

  5. 通过Spring Data Neo4J操作您的图形数据库

    在前面的一篇文章<图形数据库Neo4J简介>中,我们已经对其内部所使用的各种机制进行了简单地介绍.而在我们尝试对Neo4J进行大版本升级时,我发现网络上并没有任何成型的样例代码以及简介,而 ...

  6. spring boot利用swagger和spring doc生成在线和离线文档

    参考博客地址: 在线文档:http://blog.didispace.com/springbootswagger2/ 离线文档:http://www.jianshu.com/p/af7a6f29bf4 ...

  7. Spring DATA Neo4J(一)

    Spring DATA Neo4J——简介 Spring Framework提供了一下模块来处理基于Java的应用程序的DAO层 Spring JDBC Spring ORM Spring DATA ...

  8. 【转】(八)unity4.6Ugui中文教程文档-------概要-UGUI Rich Text

    原创至上,移步请戳:(八)unity4.6Ugui中文教程文档-------概要-UGUI Rich Text 7.Rich Text UI元素和文本网格的文本可以合并多个字体样式和大小.对 UI系统 ...

  9. 【转】(七)unity4.6Ugui中文教程文档-------概要-UGUI Auto Layout

    原创至上,移步请戳:(七)unity4.6Ugui中文教程文档-------概要-UGUI Auto Layout 6. Auto Layout Rect Transform布局系统是足够灵活,可以处 ...

随机推荐

  1. charles安装&破解

    走在测试的道路上,我们总归要学习抓包,仅仅是为了更好的定位bug出现的位置.抓包工具何其之多,但是我个人推荐的是charles,主要是因为windows和ios可以同时使用,这样就可以方便不少.不废话 ...

  2. MybatisPlus使用代码篇

    package spring.server.consumer; import com.baomidou.mybatisplus.annotation.DbType; import com.baomid ...

  3. JavaScript数值千分位格式化的方法和性能

    瞎掰的前提 前端嘛,经常处理数值和时间. 所以数值和时间的格式化少不了. 最近一直在面试前端, 就出了一个如何给数值添加千分位的面试题. 至于答案,我一直都有一种标准, 一是基于你现有的知识可以实现, ...

  4. mysql数据库为什么要分表和分区?

    一般下载的源码都带了MySQL数据库的,做个真正意义上的网站没数据库肯定不行. 数据库主要存放用户信息(注册用户名密码,分组,等级等),配置信息(管理权限配置,模板配置等),内容链接(html ,图片 ...

  5. Python面试-websocket及web框架

    一.Websocket 1. websocket概念 在讲websocket之前,我们先来看看ajax轮询和long poll的实现机制. A.  ajax轮询 ajax轮询的原理非常简单,让浏览器隔 ...

  6. Tensorflow实战第十课(RNN MNIST分类)

    设置RNN的参数 我们本节采用RNN来进行分类的训练(classifiction).会继续使用手写数据集MNIST. 让RNN从每张图片的第一行像素读到最后一行,然后进行分类判断.接下来我们导入MNI ...

  7. VBNET 文件信息和目录管理(判断,创建,删除,移动,复制)

    1.判断文件/目录是否存在 Try ' 先判断文件是否存在. If Not File.Exists(TextBox4.Text) Then File.CreateText(TextBox4.Text) ...

  8. 利用commons-pool2自定义对象池

    一.为什么使用对象池   恰当地使用对象池化技术,可以有效地减少对象生成和初始化时的消耗,提高系统的运行效率.commons-pool2是Apache下一个开源的公共资源池.我们可以根据它来快速的建立 ...

  9. hello2源代码分析

    String username = request.getParameter("username");/* *以 String 形式返回请求参数"username&quo ...

  10. # vmware异常关机后,虚拟系统无法启动的解决办法

    vmware异常关机后,虚拟系统无法启动的解决办法 先使用everything搜索所有后缀为.lck的文件,这些文件全部删除,如果不确定是否可以删除,先把这些文件转移到桌面,等能启动虚拟系统之后再删除 ...