Bevezetés a tavaszi adatokba Neo4j

1. Áttekintés

Ez a cikk az bevezetés a Spring Data Neo4j-hez, a népszerű grafikon adatbázis.

A Spring Data Neo4j lehetővé teszi a POJO alapú fejlesztést a Neo4j Graph Database számára, és ismerős Spring fogalmakat használ, például sablon osztályokat az alapvető API használatához, és annotáció alapú programozási modellt biztosít.

Ezenkívül sok fejlesztő nem igazán tudja, hogy a Neo4j valóban megfelel-e sajátos igényeinek; Itt van egy átfogó áttekintés a Stackoverflow-ról, amelyben megvitatjuk a Neo4j használatának miértjét, valamint az előnyöket és hátrányokat.

2. Maven-függőségek

Kezdjük azzal, hogy deklaráljuk a Spring Data Neo4j függőségeket a pom.xml. Az alábbiakban említett Spring modulokra szintén szükség van a Spring Data Neo4j esetében:

 org.springframework.data spring-data-neo4j 5.0.1.RELEASE org.neo4j neo4j-ogm-test 3.1.2 teszt 

Ezek a függőségek tartalmazzák a teszteléshez szükséges modulokat is.

Ne feledje, hogy az utolsó függőség „teszt” -nek számít. De azt is vegye figyelembe, hogy a való alkalmazásfejlesztés során nagyobb eséllyel fut egy teljes Neo4J szerver.

Ha beágyazott szervert akarunk használni, hozzá kell adnunk a függőséget is:

 org.neo4j neo4j-ogm-embedded-driver 3.1.2 

A spring-data-neo4j, neo4j-ogm-test és a neo4j-ogm-embedded-driver függőségek a Maven Centralon érhetők el.

3. Neo4Jj konfiguráció

A Neo4j konfigurációja nagyon egyszerű és meghatározza az alkalmazás csatlakozási beállításait a szerverhez való csatlakozáshoz. A többi rugós adatmodulhoz hasonlóan ez is egy rugós konfiguráció, amelyet XML vagy Java konfigurációként definiálhatunk.

Ebben az oktatóanyagban csak Java-alapú konfigurációt fogunk használni:

public static final String URL = System.getenv ("NEO4J_URL")! = null? System.getenv ("NEO4J_URL"): "// neo4j: [e-mail védett]: 7474"; @Bean public org.neo4j.ogm.config.Configuration getConfiguration () {return new Builder (). Uri (URL) .build (); } @Bean public SessionFactory getSessionFactory () {return new SessionFactory (getConfiguration (), "com.baeldung.spring.data.neo4j.domain"); } @Bean public Neo4jTransactionManageractionManager () {return new Neo4jTransactionManager (getSessionFactory ()); }

Mint fent említettük, a konfiguráció egyszerű és csak két beállítást tartalmaz. Először - a A SessionFactory az hivatkozva az általunk létrehozott modellekre az adatobjektumok ábrázolására. Ezután a kapcsolat tulajdonságait a kiszolgáló végpontjaival és a hozzáférési hitelesítő adatokkal.

A Neo4j az illesztőprogram osztályát az URI protokollja alapján, esetünkben „http” alapján fogja kikövetkeztetni.

Felhívjuk figyelmét, hogy ebben a példában a kapcsolattal kapcsolatos tulajdonságokat közvetlenül a kiszolgálóhoz konfigurálják; azonban egy termelési alkalmazásban ezeket megfelelően kell külsővé tenni, és a projekt szabványos konfigurációjának részét kell képezniük.

4. Neo4j adattárak

A Spring Data keretrendszeréhez igazodva a Neo4j támogatja a Spring Data repository absztrakciós viselkedését. Ez azt jelenti, hogy az alapul szolgáló állandó mechanizmushoz való hozzáférést a beépített kivonatolja Neo4jRepository ahol egy projekt közvetlenül kiterjesztheti, és a rendelkezésre álló műveleteket azonnal felhasználhatja.

Az adattárak annotált, elnevezett vagy származtatott kereső módszerekkel bővíthetők. A Spring Data Neo4j adattárak támogatása is ezen alapul Neo4jTemplate, tehát az alapul szolgáló funkcionalitás azonos.

4.1. A MovieRepository & PersonRepository

Ebben az oktatóanyagban két adattárat használunk az adatok megőrzéséhez:

@Repository nyilvános felület A MovieRepository kiterjeszti a Neo4jRepository {Movie findByTitle (@Param ("title") karakterlánc címe); @Query ("MATCH (m: Film) WHERE m.title = ~ ('(? I). *' + {Title} + '. *') RETURN m") Gyűjtemény findByTitleContaining (@Param ("title") karakterlánc cím); @Query ("MATCH (m: Film) <- [: ACTED_IN] - (a: Személy) RETURN m.title filmként, (a.name) leadásként LIMIT {limit}") List grafikon (@Param ("határ") int határ); } 

Amint lehet, az adattár tartalmaz néhány egyedi műveletet, valamint az alaposztálytól örökölt szabványos műveleteket.

Következik az egyszerűbb PersonRepository, amely csak a szokásos műveleteket végzi:

@Repository nyilvános felület A PersonRepository kiterjeszti a Neo4jRepository {//}

Lehet, hogy ezt már észrevette PersonRepository csak a szokásos Spring Data felület. Ennek az az oka, hogy ebben az egyszerű példában szinte elegendő a beépített műveleteket alapvetően használni, mivel a műveletsorunk a Film entitás. Mindazonáltal ide mindig hozzáadhat egyedi műveleteket, amelyek egy / több beépített műveletet átfedhetnek.

4.2. A Neo4j konfigurálásaAdattárak

Következő lépésként tájékoztatnunk kell Springet a megfelelő adattárról, jelezve azt a Neo4jConfiguration a 3. szakaszban létrehozott osztály:

@Configuration @ComponentScan ("com.baeldung.spring.data.neo4j") @ EnableNeo4jRepositories (basePackages = "com.baeldung.spring.data.neo4j.repository") public class MovieDatabaseNeo4jConfiguration {//}

5. A teljes adatmodell

Már elkezdtük nézegetni az adatmodellt, ezért most tegyük ki az egészet - a teljeset Film, szerep és Személy. A Személy entitás hivatkozik a Film entitás a Szerep kapcsolat.

@NodeEntity public class Movie {@Id @GeneratedValue Long id; privát húr cím; private int megjelent; privát String tagline; @Relationship (type = "ACTED_IN", direction = Relationship.INCOMING) private List szerepek; // szabványos kivitelező, mérőeszközök és beállítók}

Figyelje meg, hogyan jegyzeteltük Film val vel @NodeEntity annak jelzésére, hogy ez az osztály közvetlenül leképezve van a Neo4j csomópontjára.

@JsonIdentityInfo (generator = JSOGGenerator.class) @NodeEntity nyilvános osztály Személy {@Id @GeneratedValue Hosszú azonosító; privát karakterlánc neve; magán int született; @Relationship (type = "ACTED_IN") privát listás filmek; // standard konstruktor, getterek és beállítók} @JsonIdentityInfo (generator = JSOGGenerator.class) @RelationshipEntity (type = "ACTED_IN") public class Role {@Id @GeneratedValue Long id; magángyűjteményi szerepek; @StartNode magánszemély személy; @EndNode privát film film; // szabványos kivitelező, mérőeszközök és beállítók}

Természetesen ez az utolsó pár osztály hasonlóan jegyzetekkel és a -filmekkel van ellátva hivatkozás linkelés Személy nak nek Film osztályt az „ACTED_IN” kapcsolat alapján.

6. Adathozzáférés a MovieRepository használatával

6.1. Új filmobjektum mentése

Mentsünk néhány adatot - először egy új filmet, aztán egy személyt és természetesen egy szerepet - beleértve az összes relációs adatot, amely rendelkezésünkre áll:

Film italianJob = új film (); italianJob.setTitle ("Az olasz munka"); italianJob.setReleased (1999); movieRepository.save (olaszJob); Személyjel = új Személy (); mark.setName ("Mark Wahlberg"); personRepository.save (jelölés); Role charlie = új Role (); charlie.setMovie (olaszJob); charlie.setPerson (márka); Gyűjtemény roleNames = új HashSet (); roleNames.add ("Charlie Croker"); charlie.setRoles (roleNames); Lista szerepek = new ArrayList (); szerepek.add (charlie); italianJob.setRoles (szerepek); movieRepository.save (olaszJob);

6.2. Meglévő filmobjektum letöltése cím szerint

Ellenőrizzük most a beillesztett filmet úgy, hogy lekérjük a megadott cím használatával, amely egy egyedi művelet:

Film eredménye = movieRepository.findByTitle (cím);

6.3. Meglévő filmobjektum lekérése a cím egy részével

Lehetőség van keresni egy meglévő film keresésére a cím egy részének felhasználásával:

Gyűjtemény eredménye = movieRepository.findByTitleContaining ("olasz");

6.4. Az összes film letöltése

Az összes film egyszer visszakereshető, és ellenőrizhető a helyes szám:

Gyűjtemény eredménye = (Gyűjtemény) movieRepository.findAll ();

Számos olyan alapértelmezett magatartással rendelkező keresési módszer létezik, amely hasznos a vámkövetelmények szempontjából, és itt nem mindegyiket írják le.

6.5. Számolja meg a meglévő filmobjektumokat

Több filmobjektum beszúrása után megkapjuk a kilépő filmek számát:

long movieCount = filmRepository.count ();

6.6. Meglévő film törlése

movieRepository.delete (movieRepository.findByTitle ("Az olasz munka"));

A beillesztett film törlése után megkereshetjük a filmobjektumot, és ellenőrizhetjük, hogy az eredmény null:

assertNull (movieRepository.findByTitle ("Az olasz munka"));

6.7. Az összes beillesztett adat törlése

Lehetőség van az adatbázis összes elemének törlésére, így az adatbázis üres lesz:

filmRepository.deleteAll ();

A művelet eredménye gyorsan eltávolít minden adatot egy táblából.

7. Következtetés

Ebben az oktatóanyagban egy nagyon egyszerű példa segítségével végigvettük a Spring Data Neo4j alapjait.

A Neo4j azonban képes nagyon fejlett és összetett alkalmazások kiszolgálására, amelyek hatalmas kapcsolatokkal és hálózatokkal rendelkeznek. A Spring Data Neo4j emellett fejlett funkciókat kínál a jegyzetekkel ellátott entitásosztályok leképezéséhez a Neo4j Graph Database-be.

A fenti kódrészletek és példák megvalósítása megtalálható a GitHub projektben - ez egy Maven alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.