spring-data-neo4j 4.2.4release文檔概要

  Neo4j是一種開源的NoSQL圖數據庫,將數據以圖(把一個個實體看成節點,鏈接節點的邊表示節點間的關係)的形式保存,Neo4j也支持ACID事務管理。關係型數據庫數據訪問採用的是ORM(對象關係映射),而Neo4j數據庫採用的是OGM(對象圖形映射, Object Graph Mapper)。java

與SDN相匹配的jar包版本spring

  使用Spring Data Neo4j 4.2.x版的需求:數據庫

  JDK1.8及以上版本session

  Neo4j Graph DataBase 2.3.x及以上版本app

  Spring Framework 4.3.9RELEASE及以上版本框架

  使用OGM時確保版本在2.1.1+RELEASEdom

  版本控制ide

 

 

  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的configthis

 

  聲明一個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

 

 

 

相關文章
相關標籤/搜索