Uvod u Spring Data Neo4j

1. Pregled

Ovaj je članak uvod u Spring Data Neo4j, popularna baza podataka grafova.

Spring Data Neo4j omogućuje razvoj na bazi POJO-a za bazu podataka Neo4j Graph i koristi poznate Spring koncepte, kao što su klase predložaka za osnovnu uporabu API-ja, i nudi model programiranja zasnovan na bilješkama.

Također, mnogi programeri zapravo ne znaju hoće li Neo4j zaista odgovarati njihovim specifičnim potrebama; evo solidnog pregleda o Stackoverflowu koji raspravlja o tome zašto koristiti Neo4j te prednosti i nedostatke.

2. Ovisnosti Mavena

Počnimo s deklariranjem ovisnosti Spring Data Neo4j u pom.xml. Dolje spomenuti moduli Spring također su potrebni za Spring Data Neo4j:

 org.springframework.data spring-data-neo4j 5.0.1.OBLOŽENJE org.neo4j neo4j-ogm-test 3.1.2 test 

Te ovisnosti uključuju potrebne module za testiranje.

Imajte na umu da je zadnja ovisnost opseg "test". Ali također imajte na umu da ćete u stvarnom razvoju aplikacija vjerojatnije imati puni Neo4J poslužitelj.

Ako želimo koristiti ugrađeni poslužitelj, također moramo dodati ovisnost:

 org.neo4j neo4j-ogm-embedded-driver 3.1.2 

Ovisnosti spring-data-neo4j, neo4j-ogm-test i neo4j-ogm-embedded-driver dostupne su na Maven Central.

3. Neo4Jj konfiguracija

Konfiguracija Neo4j vrlo je jednostavna i definira postavku veze za povezivanje aplikacije s poslužiteljem. Slično većini ostalih modula podataka s oprugom, ovo je konfiguracija opruge koja se može definirati kao XML ili Java konfiguracija.

U ovom uputstvu koristit ćemo samo konfiguraciju zasnovanu na Javi:

javni statički završni URL niza = System.getenv ("NEO4J_URL")! = null? System.getenv ("NEO4J_URL"): "// neo4j: [e-pošta zaštićena]: 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 ()); }

Kao što je gore spomenuto, config je jednostavan i sadrži samo dvije postavke. Prvo - SessionFactory je referenciranje modela koje smo stvorili da predstavljaju objekte podataka. Zatim, svojstva veze s krajnjim točkama poslužitelja i vjerodajnice za pristup.

Neo4j će zaključiti klasu upravljačkih programa na temelju protokola URI-a, u našem slučaju "http".

Imajte na umu da su u ovom primjeru svojstva povezana s vezom konfigurirana izravno na poslužitelj; međutim, u proizvodnoj aplikaciji, oni bi trebali biti pravilno eksternalizirani i dio standardne konfiguracije projekta.

4. Spremišta Neo4j

Usklađujući se s okvirom Spring Data, Neo4j podržava ponašanje apstrakcije spremišta Spring Data. To znači da se pristup ugrađenom trajnom mehanizmu apstrahira Neo4jRepository gdje ga projekt može izravno proširiti i upotrijebiti predviđene operacije odmah.

Spremišta su proširiva anotiranim, imenovanim ili izvedenim metodama pronalaženja. Podrška za spremišta Spring Data Neo4j također se temelji na Neo4jTemplate, tako da je osnovna funkcionalnost identična.

4.1. Stvaranje Spremište filmova & Spremište osoba

U ovom uputstvu koristimo dva spremišta za trajnost podataka:

Javno sučelje @Repository MovieRepository proširuje Neo4jRepository {Movie findByTitle (@Param ("title") Naslov niza); @Query ("MATCH (m: Movie) WHERE m.title = ~ ('(? I). *' + {Title} + '. *') RETURN m") Kolekcija findByTitleContaining (@Param ("title") String titula); @Query ("MATCH (m: Movie) <- [: ACTED_IN] - (a: Person) RETURN m.title kao film, prikupi (a.name) kao cast LIMIT {limit}") Popis graf (@Param ("limit") int limit); } 

Kao što možete, spremište sadrži neke prilagođene operacije kao i one standardne naslijeđene iz osnovne klase.

Dalje imamo jednostavnije Spremište osoba, koji samo ima standardne operacije:

@Repository javno sučelje PersonRepository proširuje Neo4jRepository {//}

Možda ste to već primijetili Spremište osoba je samo standardno sučelje Spring Data. To je zato što je u ovom jednostavnom primjeru gotovo dovoljno koristiti ugrađene operacije u osnovi jer je naš skup operacija povezan s Film entitet. Međutim, ovdje uvijek možete dodati prilagođene operacije koje mogu premotati jednu / više ugrađenih operacija.

4.2. Konfiguriranje Neo4jSpremišta

Kao sljedeći korak, Springu moramo priopćiti relevantno spremište koje ga označava u Neo4jConfiguration razred stvoren u odjeljku 3:

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

5. Potpuni model podataka

Već smo počeli gledati podatkovni model, pa hajde sad da ga izložimo u cijelosti Film, uloga i Osoba. The Osoba entitet upućuje na Film entitet kroz Uloga odnos.

@NodeEntity film javne klase {@Id @GeneratedValue Long id; privatni naslov niza; privatni int objavljen; privatni sloganski niz; @Relationship (type = "ACTED_IN", direction = Relationship.INCOMING) uloge privatnog popisa; // standardni konstruktor, getteri i postavljači}

Primijetite kako smo bilježili Film s @NodeEntity ukazujući da je ova klasa izravno preslikana na čvor u Neo4j.

@JsonIdentityInfo (generator = JSOGGenerator.class) @NodeEntity javna klasa Osoba {@Id @GeneratedValue Long id; privatni naziv niza; privatni int rođen; @Relationship (type = "ACTED_IN") privatni popis filmova; // standardni konstruktor, getteri i postavljači} @JsonIdentityInfo (generator = JSOGGenerator.class) @RelationshipEntity (type = "ACTED_IN") uloga javne klase {@Id @GeneratedValue Long id; uloge privatne kolekcije; @StartNode privatna osoba; @EndNode privatni filmski film; // standardni konstruktor, getteri i postavljači}

Naravno, ovih posljednjih nekoliko satova slično su označeni i filmovi referenca je povezivanje Osoba do Film razreda odnosom "ACTED_IN".

6. Pristup podacima pomoću MovieRepositorija

6.1. Spremanje novog filmskog objekta

Sačuvajmo neke podatke - prvo novi film, zatim osobu i naravno ulogu - uključujući sve podatke o relacijama koje također imamo:

Film italianJob = novi film (); italianJob.setTitle ("Talijanski posao"); italianJob.setReleased (1999); movieRepository.save (italianJob); Oznaka osobe = nova osoba (); mark.setName ("Mark Wahlberg"); personRepository.save (oznaka); Uloga charlie = nova uloga (); charlie.setMovie (italianJob); charlie.setPerson (oznaka); Zbirka roleNames = novi HashSet (); roleNames.add ("Charlie Croker"); charlie.setRoles (Imena uloga); Popis uloga = novi ArrayList (); uloge.dodaj (Charlie); italianJob.setRoles (uloge); movieRepository.save (italianJob);

6.2. Dohvaćanje postojećeg filmskog objekta prema naslovu

Provjerimo sada umetnuti film dohvaćajući ga pomoću definiranog naslova koji je prilagođena operacija:

Rezultat filma = movieRepository.findByTitle (naslov);

6.3. Dohvaćanje postojećeg filmskog objekta dijelom naslova

Moguće je pretražiti postojeći film pomoću dijela naslova:

Rezultat zbirke = movieRepository.findByTitleContaining ("talijanski");

6.4. Dohvaćanje svih filmova

Svi se filmovi mogu jednom preuzeti i može se provjeriti je li točan broj:

Rezultat zbirke = (Zbirka) movieRepository.findAll ();

Međutim, postoji niz metoda pronalaska koje imaju zadano ponašanje, što je korisno za carinske zahtjeve, a nisu sve ovdje opisane.

6.5. Prebrojite postojeće filmske objekte

Nakon umetanja nekoliko filmskih objekata, možemo dobiti izlazni broj filmova:

long movieCount = movieRepository.count ();

6.6. Brisanje postojećeg filma

movieRepository.delete (movieRepository.findByTitle ("Talijanski posao"));

Nakon brisanja umetnutog filma možemo pretražiti objekt filma i provjeriti je li rezultat null:

assertNull (movieRepository.findByTitle ("Talijanski posao"));

6.7. Izbriši sve umetnute podatke

Moguće je izbrisati sve elemente baze podataka čineći bazu praznom:

movieRepository.deleteAll ();

Rezultat ove operacije brzo uklanja sve podatke iz tablice.

7. Zaključak

U ovom smo tutorijalu prošli kroz osnove Spring Data Neo4j koristeći vrlo jednostavan primjer.

Međutim, Neo4j je sposoban pružiti uslugu vrlo naprednim i složenim programima koji imaju ogroman skup odnosa i mreža. A Spring Data Neo4j također nudi napredne značajke za mapiranje označenih klasa entiteta u bazu podataka Neo4j Graph.

Implementacija gornjih isječaka koda i primjeri mogu se naći u projektu GitHub - ovo je projekt zasnovan na Mavenu, pa bi ga trebalo lako uvesti i pokrenuti kakav jest.


$config[zx-auto] not found$config[zx-overlay] not found