Úvod do jarných údajov Neo4j

1. Prehľad

Tento článok je úvod do Spring Data Neo4j, populárna databáza grafov.

Spring Data Neo4j umožňuje vývoj založený na POJO pre databázu grafov Neo4j a používa známe jarné koncepty, ako sú triedy šablón pre základné použitie API, a poskytuje anotačný programovací model.

Mnoho vývojárov tiež nevie, či bude Neo4j skutočne zodpovedať ich konkrétnym potrebám; tu je podrobný prehľad o Stackoverflow, kde sa diskutuje o tom, prečo používať Neo4j, a výhody a nevýhody.

2. Maven závislosti

Začnime vyhlásením závislostí Spring Data Neo4j v pom.xml. Nižšie uvedené moduly Spring sú tiež potrebné pre Spring Data Neo4j:

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

Tieto závislosti zahŕňajú aj požadované moduly na testovanie.

Upozorňujeme, že posledná závislosť je označená ako „test“. Upozorňujeme tiež, že pri vývoji aplikácií v reálnom svete je pravdepodobnejšie, že budete mať spustený celý server Neo4J.

Ak chceme použiť zabudovaný server, musíme pridať aj závislosť:

 org.neo4j neo4j-ogm-embedded-driver 3.1.2 

Závislosti spring-data-neo4j, neo4j-ogm-test a neo4j-ogm-embedded-driver sú k dispozícii na serveri Maven Central.

3. Konfigurácia Neo4Jj

Konfigurácia Neo4j je veľmi jednoduchá a definuje nastavenie spojenia pre aplikáciu na pripojenie k serveru. Podobne ako väčšina ostatných pružinových dátových modulov, aj toto je konfigurácia pružiny, ktorú je možné definovať ako konfiguráciu XML alebo Java.

V tomto výučbe budeme používať iba konfiguráciu založenú na prostredí Java:

verejná statická konečná reťazec URL = System.getenv ("NEO4J_URL")! = null? System.getenv ("NEO4J_URL"): "// neo4j: [chránený e-mailom]: 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 Neo4jTransactionManager transactionManager () {vrátiť nový Neo4jTransactionManager (getSessionFactory ()); }

Ako už bolo spomenuté vyššie, konfigurácia je jednoduchá a obsahuje iba dve nastavenia. Prvý - SessionFactory je odkazovanie na modely, ktoré sme vytvorili, aby reprezentovali dátové objekty. Potom vlastnosti pripojenia s koncovými bodmi servera a prístupové poverenia.

Neo4j odvodí triedu ovládačov na základe protokolu URI, v našom prípade „http“.

Upozorňujeme, že v tomto príklade sú vlastnosti súvisiace s pripojením nakonfigurované priamo na server; v produkčnej aplikácii by však mali byť správne externalizované a súčasťou štandardnej konfigurácie projektu.

4. Úložiská Neo4j

V súlade s rámcom Spring Data podporuje Neo4j abstrakčné správanie úložiska Spring Data. To znamená, že prístup k základnému perzistentnému mechanizmu je abstraktne zabudovaný Neo4jRepository kde ho projekt môže priamo rozšíriť a využiť poskytované operácie priamo z krabice.

Úložiská sú rozšíriteľné o anotované, pomenované alebo odvodené vyhľadávacie metódy. Podpora pre Spring Data Neo4j Repositories je tiež založená na Neo4jTemplate, takže základná funkcionalita je identická.

4.1. Vytvára sa MovieRepository & Úložisko osôb

V tomto výučbe používame na uchovávanie údajov dve úložiská:

@Repository verejné rozhranie MovieRepository rozširuje Neo4jRepository {Movie findByTitle (@Param ("title") Názov reťazca); @Query ("MATCH (m: Movie) WHERE m.title = ~ ('(? I). *' + {Title} + '. *') RETURN m") Zbierka findByTitleContaining (@Param ("title") reťazec názov); @Query ("MATCH (m: Movie) <- [: ACTED_IN] - (a: Person) RETURN m.title ako film, zbierať (a.name) ako obsadenie LIMIT {limit}") zoznam graf (@Param ("limit") int limit); } 

Ako môžete, úložisko obsahuje niekoľko vlastných aj štandardných operácií zdedených zo základnej triedy.

Ďalej to máme jednoduchšie Úložisko osôb, ktorý má iba štandardné operácie:

Verejné rozhranie @Repository PersonRepository rozširuje Neo4jRepository {//}

Možno ste si to už všimli Úložisko osôb je iba štandardné rozhranie Spring Data. Je to preto, že v tomto jednoduchom príklade je takmer postačujúce používať vstavané operácie, pretože naša operačná sada súvisí s Film subjekt. Tu však môžete kedykoľvek pridať vlastné operácie, ktoré môžu zabaliť jednu alebo viac vstavaných operácií.

4.2. Konfiguruje sa Neo4jÚložiská

Ako ďalší krok musíme dať Springu vedieť príslušné úložisko, ktoré ho označuje v Neo4jConfiguration trieda vytvorená v sekcii 3:

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

5. Úplný dátový model

Už sme sa začali zaoberať údajovým modelom, takže poďme teraz všetko rozložiť - naplno Film, Rola a Osoba. The Osoba subjekt odkazuje na Film subjekt prostredníctvom Rola vzťah.

@NodeEntity public class Movie {@Id @GeneratedValue Long id; súkromný názov reťazca; súkromný int prepustený; súkromný slogan reťazca; @Relationship (type = "ACTED_IN", direction = Relationship.INCOMING) súkromné ​​roly zoznamu; // štandardný konštruktor, getre a setre}

Všimnite si, ako sme anotovali Film s @NodeEntity na označenie toho, že táto trieda je priamo mapovaná na uzol v Neo4j.

@JsonIdentityInfo (generátor = JSOGGenerator.class) @NodeEntity verejná trieda Osoba {@Id @GeneratedValue Long id; súkromné ​​meno reťazca; súkromný narodený; @Relationship (type = "ACTED_IN") súkromné ​​zoznamy filmov; // štandardný konštruktor, getri a nastavovatelia} @JsonIdentityInfo (generátor = JSOGGenerator.class) @RelationshipEntity (type = "ACTED_IN") verejná trieda Rola {@Id @GeneratedValue Long id; roly súkromnej zbierky; @StartNode súkromná osoba; @EndNode súkromný filmový film; // štandardný konštruktor, getre a setre}

Samozrejme, tieto posledné triedy sú podobne anotované a filmy odkaz je prepojený Osoba do Film triedy vzťahom „ACTED_IN“.

6. Prístup k dátam pomocou MovieRepository

6.1. Uloženie nového filmového objektu

Uložme si nejaké dáta - najskôr nový film, potom osobu a samozrejme rolu - vrátane všetkých údajov o reláciách, ktoré máme tiež:

Film italianJob = nový film (); italianJob.setTitle ("Talianska práca"); italianJob.setReleased (1999); filmRepository.save (italianJob); Osobná značka = nová osoba (); mark.setName ("Mark Wahlberg"); personRepository.save (značka); Rola charlie = nová rola (); charlie.setMovie (italianJob); charlie.setPerson (značka); Zbierka roleNames = new HashSet (); roleNames.add ("Charlie Croker"); charlie.setRoles (roleNames); Zoznam rolí = nový ArrayList (); role.add (charlie); italianJob.setRoles (role); filmRepository.save (italianJob);

6.2. Načítanie existujúceho filmového objektu podľa názvu

Poďme si teraz overiť vložený film jeho načítaním pomocou definovaného nadpisu, čo je vlastná operácia:

Výsledok filmu = filmRepository.findByTitle (názov);

6.3. Načítanie existujúceho filmového objektu časťou názvu

Je možné vyhľadávať a vyhľadávať existujúci film pomocou časti názvu:

Výsledok zbierky = movieRepository.findByTitleContaining ("taliansky");

6.4. Načítanie všetkých filmov

Všetky filmy je možné načítať naraz a je možné skontrolovať ich správny počet:

Výsledok zbierky = (Zbierka) movieRepository.findAll ();

Existuje však množstvo metód hľadania poskytovaných s predvoleným správaním, ktoré sú užitočné pre colné požiadavky, a nie všetky sú tu opísané.

6.5. Spočítajte existujúce filmové objekty

Po vložení niekoľkých filmových objektov môžeme dosiahnuť výstupný počet filmov:

long movieCount = movieRepository.count ();

6.6. Vymazanie existujúceho filmu

movieRepository.delete (movieRepository.findByTitle ("Talianska práca"));

Po odstránení vloženého filmu môžeme vyhľadať objekt filmu a skontrolovať, či je výsledok nulový:

assertNull (movieRepository.findByTitle ("Talianska práca"));

6.7. Odstrániť všetky vložené údaje

Je možné vymazať všetky prvky v databáze, čím sa databáza vyprázdni:

filmRepository.deleteAll ();

Výsledok tejto operácie rýchlo odstráni všetky údaje z tabuľky.

7. Záver

V tomto tutoriáli sme si na veľmi jednoduchom príklade prešli základy Spring Data Neo4j.

Neo4j je však schopný zabezpečiť veľmi pokročilé a zložité aplikácie s obrovským súborom vzťahov a sietí. A Spring Data Neo4j tiež ponúka pokročilé funkcie na mapovanie anotovaných tried entít do databázy grafov Neo4j.

Implementáciu vyššie uvedených útržkov kódu a príkladov nájdete v projekte GitHub - jedná sa o projekt založený na Maven, takže by malo byť ľahké ho importovať a spustiť tak, ako je.


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