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
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.