Spring DATA Neo4j - 示例

2022-07-08 16:14 更新

在本章中,我們將討論如何開發(fā)一個(gè) Spring 框架項(xiàng)目來使用 Neo4j 數(shù)據(jù)庫。


Spring DATA Neo4j 模塊注釋

我們將使用以下? Spring Framework ?注釋來開發(fā)此應(yīng)用程序。

S.No. Spring DATA Neo4j注解 用法
1 @GraphEntity 定義域類?Neo4j Entity?
2 @GraphID 定義節(jié)點(diǎn)或關(guān)系?id?
3 @GraphProperty 定義節(jié)點(diǎn)或關(guān)系屬性

在開發(fā)應(yīng)用程序之前,請參考“Neo4j Spring DATA環(huán)境設(shè)置”一章來設(shè)置 Maven Eclipse IDE 項(xiàng)目。


實(shí)現(xiàn) Spring DATA Neo4j 應(yīng)用程序的簡要步驟 - 

  • 開發(fā)圖表實(shí)體或域或 ?POJO? 類

  • 開發(fā) ?DAO? 或存儲(chǔ)庫

  • 開發(fā)服務(wù)層(如果需要)

  • ?Spring DATA Neo4j XML? 配置

我們現(xiàn)在演示如何在 Eclipse IDE 中開發(fā)基于 Maven 的 Spring DATA 應(yīng)用程序來執(zhí)行? Neo4j DB? 操作。


開發(fā)圖表實(shí)體或域或 POJO 類

我們要實(shí)現(xiàn)?equals()?和?hashCode()?方法。

它不需要為?“id”?屬性提供 ?setter ?方法,因?yàn)?Neo4j 將負(fù)責(zé)分配此屬性

package com.tp.springdata.neo4j.domain;

import org.springframework.data.neo4j.annotation.GraphId;
import org.springframework.data.neo4j.annotation.NodeEntity;

@NodeEntity
public class GoogleProfile {

   @GraphId Long id;			
   private String name;
   private String address;
   private String sex;
   private String dob;

   public Long getId() {
      return id;
   }		
   
   public String getName() {
      return name;
   }
   
   public void setName(String name) {
      this.name = name;
   }
   
   public String getAddress() {
      return address;
   }
   
   public void setAddress(String address) {
      this.address = address;
   }
   
   public String getSex() {
      return sex;
   }
   
   public void setSex(String sex) {
      this.sex = sex;
   }
   
   public String getDob() {
      return dob;
   }
   
   public void setDob(String dob) {
      this.dob = dob;
   }	
   
   public boolean equals(Object other) {
   
      if (this == other)
         return true;

      if (id == null) 
         return false;

      if (! (other instanceof GoogleProfile)) 
         return false;

      return id.equals(((GoogleProfile) other).id);
   }
   
   public int hashCode() {
      return id == null ? System.identityHashCode(this) : id.hashCode();
   }	
   
   public String toString(){
      return "Profile[id:"+ id +",name:"+ name +",sex:" + sex+ ",address:" + address + ",dob:" + dob +"]";
   }			
}


@GraphProperty 是可選的,所以我們可以省略這個(gè)。 上面的實(shí)體同下。

package com.tp.springdata.neo4j.domain;

import org.springframework.data.neo4j.annotation.GraphId;
import org.springframework.data.neo4j.annotation.NodeEntity;

@NodeEntity
public class GoogleProfile {

   @GraphId 
   private Long id;

   private String name;
   private String address;
   private String sex;
   private String dob;

   // Getter for id
   // Setters and Getters for rest of properties
   // implement equals() and hashCode() methods
}


開發(fā) Spring DATA Neo4j 存儲(chǔ)庫。

正如我們前面討論的,我們需要通過擴(kuò)展? Spring DATA Neo4j API? 接口?“GraphRepository”?而不需要它的實(shí)現(xiàn)來開發(fā)接口。


Spring DATA Neo4j 將在內(nèi)部為此接口提供實(shí)現(xiàn)。


為我們的 ?Domain? 類定義一個(gè)存儲(chǔ)庫或 DAO 接口:?GoogleProfile?

package com.tp.springdata.neo4j.dao;

import org.springframework.data.neo4j.repository.GraphRepository;

public interface GoogleProfileRepository extends GraphRepository<GoogleProfile>{ 
}


實(shí)現(xiàn) Spring DAT Neo4j 存儲(chǔ)庫非常容易和簡單。 我們只需要通過指定我們的域類作為參數(shù)來擴(kuò)展 GraphRepository 來定義一個(gè)接口。


發(fā)展服務(wù)層工件:接口和實(shí)現(xiàn)。

最好在我們的應(yīng)用程序中在 DAO 層之上提供一個(gè) ?Service? 層。


Service 構(gòu)件

?Service ?組件接口:

package com.tp.springdata.neo4j.service;

import org.springframework.data.neo4j.conversion.Result;
import com.tp.springdata.neo4j.domain.GoogleProfile;

public interface GoogleProfileService {

   GoogleProfile create(GoogleProfile profile);
   void delete(GoogleProfile profile);		
   GoogleProfile findById(long id);		
   Result<GoogleProfile> findAll();
}


?Service ?組件的實(shí)現(xiàn):

package com.tp.springdata.neo4j.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.neo4j.conversion.Result;
import org.springframework.stereotype.Service;

import com.tp.springdata.neo4j.dao.GoogleProfileRepository;
import com.tp.springdata.neo4j.domain.GoogleProfile;

@Service("googleProfileService")
public class GoogleProfileServiceImpl implements GoogleProfileService {

   @Autowired
   private GoogleProfileRepository googleProfileRepository;	

   public GoogleProfile create(GoogleProfile profile) {
      return googleProfileRepository.save(profile);
   }

   public void delete(GoogleProfile profile) {		
      googleProfileRepository.delete(profile);
   }

   public GoogleProfile findById(long id) {		
      return googleProfileRepository.findOne(id);
   }

   public Result<GoogleProfile> findAll() {		
      return googleProfileRepository.findAll();
   }
}


Spring DATA Neo4j XML 配置

要運(yùn)行基于 Spring 的應(yīng)用程序,我們需要提供一些 XML 配置。

我們需要在 Spring XML 配置文件中提供以下詳細(xì)信息

提供 Spring Data Neo4j 命名空間

xmlns:neo4j=http://www.springframework.org/schema/data/neo4j


提供 Spring 數(shù)據(jù) Neo4j 模式定義(XSD 文件)

xsi:schemaLocation="http://www.springframework.org/schema/data/neo4j    http://www.springframework.org/schema/data/neo4j/spring-neo4j.xsd"


spring-neo4j.xsd 文件包含所有 Spring Data Neo4j 相關(guān)的? XML? 標(biāo)簽

提供我們的 Neo4j 數(shù)據(jù)庫位置和我們的圖實(shí)體(域或 POJO 類)基礎(chǔ)包

<neo4j:config storeDirectory="C:TPNeo4jDB" base-package="com.tp.springdata.neo4j.domain"/?>

這里 storeDirectory =“C:\ TPNeo4jDB”指定我們的 Neo4j 數(shù)據(jù)庫文件存儲(chǔ)在我們的文件系統(tǒng)中的 C:\ TPNeo4jDB 位置。


base-package =“com.tp.springdata.neo4j.domain”


我們的所有圖實(shí)體都有 ?com.tp.springdata.neo4j.domain? 作為我們的應(yīng)用程序類路徑中的基礎(chǔ)包


提供我們的 Spring Data Neo4j 存儲(chǔ)庫(DAO Interfaces)基礎(chǔ)包。

<neo4j:repositories base-package="com.tp.springdata.neo4j.dao"/?>


我們的所有 Spring Data Neo4j 存儲(chǔ)庫都可以在我們的應(yīng)用程序類路徑 ?com.tp.springdata.neo4j.dao? 包

提供 Spring 配置以注冊帶有 Spring IOC 容器的注釋組件。

<context:component-scan base-package="com.tp.springdata.neo4j.service" /?>


我們的所有組件或服務(wù)都可以在我們的應(yīng)用程序類路徑中的?“com.tp.springdata.neo4j.service?”包

完成?“googleprofile.xml”?

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/data/neo4j
      http://www.springframework.org/schema/data/neo4j/spring-neo4j.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx.xsd">

   <context:component-scan base-package="com.tp.springdata.neo4j.service" />

   <neo4j:config storeDirectory="C:TPNeo4jDB" 
      base-package="com.tp.springdata.neo4j.domain"/>

   <neo4j:repositories base-package="com.tp.springdata.neo4j.dao"/>

   <tx:annotation-driven />
</beans>


開發(fā)測試程序并測試所有操作

import java.util.Iterator;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.neo4j.conversion.Result;

import com.tp.springdata.neo4j.service.GoogleProfileService;
import com.tp.springdata.neo4j.domain.GoogleProfile;

public class GoogleProfileTest {
   public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("googleprofile.xml");		
      GoogleProfileService service = (GoogleProfileService) context.getBean("googleProfileService");

      // Please uncomment one of the operation section 
      // and comment remaining section to test only one operation at a time
      // Here I've uncommented CREATE operation and 
      // commented other operations: FIND ONE, FIND ALL, DELETE
      // CREATE Operation
      GoogleProfile profile = createPofile();
      createProfile(service,profile);		
      System.out.println("GoogleProfile created successfully.");

      // FIND ONE 
      /*
      GoogleProfile profile = getOneProfileById(service,67515L);		
      System.out.println(profile);
      */

      // FIND ALL
      /*
      getAllProfiles(service);		
      */

      // DELETE 
      /*
      GoogleProfile profile = createPofile();
      deleteProfile(service,profile);		
      System.out.println("GoogleProfile deleted successfully.");		
      */
   }
   
   private static GoogleProfile createProfile(GoogleProfileService service, GoogleProfile profile){
      return service.create(profile);
   }	
   
   private static void deleteProfile(GoogleProfileService service,GoogleProfile profile){
      service.delete(profile);
   }	
   
   private static GoogleProfile getOneProfileById(GoogleProfileService service,Long id){
      return service.findById(id);
   }	
   
   private static void getAllProfiles(GoogleProfileService service){
      Result<GoogleProfile> result = service.findAll();			
      Iterator<GoogleProfile> iterator = result.iterator();
      
      while(iterator.hasNext()){
         System.out.println(iterator.next());
      }
   }
   
   private static GoogleProfile createPofile(){
      GoogleProfile profile = new GoogleProfile();		
      profile.setName("Profile-2");
      profile.setAddress("Hyderabad");
      profile.setSex("Male");
      profile.setDob("02/02/1980");		
      return profile;
   }
}

我已取消注釋只有為 CREATE 操作和注釋剩下的3個(gè)操作。

如果你想測試其他操作,?jut? 注釋不需要的部分和取消注釋想要的部分,并測試此應(yīng)用程序

最終 Eclipse Maven 項(xiàng)目結(jié)構(gòu)



注意:-

當(dāng)我們運(yùn)行這個(gè)程序,請確保我們的 Neo4j 數(shù)據(jù)庫服務(wù)器應(yīng)該在? SHUTDOWM ?狀態(tài)。


在執(zhí)行此 Java 程序之前,檢查您的 Neo4j 是否處于關(guān)閉模式。 如果沒有,請點(diǎn)擊“停止”按鈕展開它。


檢查您的Neo4j

運(yùn)行 GoogleProfileTest.java 應(yīng)用程序并查看結(jié)果

當(dāng)我們在 Eclipse IDE 中運(yùn)行這個(gè) CREATE 操作時(shí),我們可以在控制臺(tái)中觀察到以下消息。


運(yùn)行GoogleProfileTest.java

執(zhí)行一些操作后,然后通過單擊“開始”按鈕啟動(dòng) Neo4j 數(shù)據(jù)庫服務(wù)器


啟動(dòng)Neo4j數(shù)據(jù)庫服務(wù)器

使用 http:// localhost:7474 / url 打開 Neo4j 數(shù)據(jù)瀏覽器


url


在數(shù)據(jù)瀏覽器上鍵入以下命令


命令


點(diǎn)擊“執(zhí)行”按鈕并觀察結(jié)果


到目前為止,我們已經(jīng)創(chuàng)建了3個(gè)? GoogleProfile ?節(jié)點(diǎn)。



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)