Vodič za Neo4J s Javom

1. Uvod

Ovaj je članak o Neo4j - jedna od najzrelijih i potpuno opremljenih baza podataka grafova na tržištu danas. Grafičke baze podataka pristupaju zadaći modeliranja podataka s gledištem da se mnoge stvari u životu mogu predstaviti kao zbirka čvorovi (V) i veze među njima nazvane rubovi (E).

2. Ugrađeni Neo4j

Najlakši način za početak Neo4j je korištenje ugrađene verzije u kojoj Neo4j radi u istom JVM-u kao i vaša aplikacija.

Prvo, moramo dodati Mavenovu ovisnost:

 org.neo4j neo4j 3.4.6 

Možete provjeriti ovu vezu da biste preuzeli najnoviju verziju.

Dalje, stvorimo tvornicu:

GraphDatabaseFactory graphDbFactory = novo GraphDatabaseFactory ();

Na kraju kreiramo ugrađenu bazu podataka:

GraphDatabaseService graphDb = graphDbFactory.newEmbeddedDatabase (nova datoteka ("podaci / automobili"));

Sada prava akcija može započeti! Prvo, moramo stvoriti neke čvorove u našem grafikonu, a za to moramo započeti transakciju od Neo4j odbit će svaku destruktivnu operaciju ako transakcija nije započeta:

graphDb.beginTx ();

Nakon što transakcija bude u tijeku, možemo početi dodavati čvorove:

Čvor car = graphDb.createNode (Label.label ("Car")); car.setProperty ("make", "tesla"); car.setProperty ("model", "model3"); Vlasnik čvora = graphDb.createNode (Label.label ("Osoba")); owner.setProperty ("firstName", "baeldung"); owner.setProperty ("lastName", "baeldung");

Ovdje smo dodali čvor Automobil sa svojstvima napraviti i model kao i čvor Osoba sa svojstvima ime i prezime

Sada možemo dodati odnos:

owner.createRelationshipTo (auto, RelationshipType.withName ("owner"));

Izjava iznad dodala je rub koji spaja dva čvora s vlasnik označiti. Taj odnos možemo provjeriti pokretanjem upita napisanog na Neo4jeva snažan Sajfer Jezik:

Rezultat rezultata = graphDb.execute ("MATCH (c: Car) <- [vlasnik] - (p: Osoba)" + "WHERE c.make = 'tesla'" + "RETURN p.firstName, p.lastName");

Ovdje tražimo da pronađete vlasnika automobila za bilo koji automobil čija je marka tesla i vratite nam svoje ime i prezime. Ne iznenađuje da se ovo vraća: {p.firstName = baeldung, p.lastName = baeldung}

3. Jezik upita Cypher

Neo4j pruža vrlo moćan i prilično intuitivan jezik za upite koji podržava čitav niz značajki koje bi se očekivale od baze podataka. Ispitajmo kako možemo postići taj standardni zadatak stvaranja, dohvaćanja, ažuriranja i brisanja.

3.1. Stvori čvor

Ključna riječ Create može se koristiti za stvaranje čvorova i odnosa.

CREATE (self: Company {name: "Baeldung"}) POVRATAK self

Ovdje smo stvorili tvrtku s jednim vlasništvom Ime. Definicija čvora označena je zagradama i njegova su svojstva zatvorena u vitičaste zagrade. U ovom slučaju, sebe je zamjensko ime za čvor i Društvo je oznaka čvora.

3.2. Stvorite odnos

Moguće je stvoriti čvor i odnos prema tom čvoru sve u jednom upitu:

Rezultat rezultata = graphDb.execute ("STVORI (baeldung: Tvrtka {naziv: \" Baeldung \ "})" + "- [: posjeduje] -> (tesla: Automobil {make: 'tesla', model: 'modelX'}} ) "+" POVRATAK baeldung, tesla ");

Ovdje smo stvorili čvorove baeldung i tesla i između njih uspostavili vlasnički odnos. Stvaranje odnosa s postojećim čvorovima je, naravno, također moguće.

3.3. Dohvati podatke

UTAKMICA ključna riječ koristi se za pronalaženje podataka u kombinaciji s POVRATAK za kontrolu koje se podatkovne točke vraćaju. The GDJE klauzula može se koristiti za filtriranje samo onih čvorova koji imaju svojstva koja želimo.

Otkrijmo ime tvrtke koja je vlasnik tesla modelX:

Rezultat rezultata = graphDb.execute ("MATCH (tvrtka: Tvrtka) - [: posjeduje] -> (automobil: Automobil)" + "GDJE car.make = 'tesla' i car.model = 'modelX'" + "VRAĆANJE tvrtke .Ime");

3.4. Ažuriraj čvorove

SET ključna riječ može se koristiti za ažuriranje svojstava ili oznaka čvora. Dodajmo kilometražu na našu teslu:

Rezultat rezultata = graphDb.execute ("MATCH (car: Car)" + "WHERE car.make = 'tesla'" + "SET car.milage = 120" + "SET car: Car: Electro" + "SET car.model = NULL "+" POVRATAK automobila ");

Ovdje dodajemo novo svojstvo zvano miljarina, modificirajte oznake da budu obje Automobil i Elektro i na kraju, brišemo model imanje uopće.

3.5. Izbriši čvorove

Ključna riječ DELETE može se koristiti za trajno uklanjanje čvorova ili odnosa s grafikona:

graphDb.execute ("MATCH (company: Company)" + "WHERE company.name = 'Baeldung'" + "DELETE company");

Ovdje smo izbrisali tvrtku koja se zove Baeldung.

3.6. Vezanje parametara

U gornjim primjerima imamo čvrsto kodirane vrijednosti parametara što nije najbolja praksa. Srećom, Neo4j pruža mogućnost vezivanja varijabli za upit:

Parametri karte = novi HashMap (); params.put ("ime", "baeldung"); params.put ("make", "tesla"); params.put ("model", "modelS"); Rezultat rezultata = graphDb.execute ("CREATE (baeldung: Company {name: $ name})" + "- [: posjeduje] -> (tesla: Car {make: $ make, model: $ model})" + "RETURN baeldung, tesla ", params);

4. Java upravljački program

Do sada smo gledali interakciju s ugrađenim Neo4j primjerice, međutim, po svoj prilici za proizvodnju, htjeli bismo pokrenuti samostalni poslužitelj i povezati se s njim putem ponuđenog upravljačkog programa. Prvo, moramo dodati još jednu ovisnost u našem mavenu pom.xml:

 org.neo4j.driver neo4j-java-driver 1.6.2 

Možete slijediti ovu vezu da biste provjerili ima li najnovije verzije ovog upravljačkog programa.

Sada možemo uspostaviti vezu:

Upravljački program vozača = GraphDatabase.driver ("vijak: // localhost: 7687", AuthTokens.basic ("neo4j", "12345"));

Zatim stvorite sesiju:

Sjednica sesije = driver.session ();

Napokon, možemo pokrenuti nekoliko upita:

session.run ("STVORI (baeldung: Tvrtka {naziv: \" Baeldung \ "})" + "- [: posjeduje] -> (tesla: Automobil {make: 'tesla', model: 'modelX'})" " "POVRATAK baeldung, tesla");

Kad završimo sa svim svojim poslom, moramo zatvoriti i sesiju i upravljački program:

session.close (); driver.close ();

5. JDBC upravljački program

Također je moguće komunicirati s Neo4j putem JDBC upravljačkog programa. Još jedna ovisnost za naše pom.xml:

 org.neo4j neo4j-jdbc-driver 3.4.0 

Možete slijediti ovu vezu za preuzimanje najnovije verzije ovog upravljačkog programa.

Dalje, uspostavimo JDBC vezu:

Veza con = DriverManager.getConnection ("jdbc: neo4j: bolt: // localhost /? User = neo4j, lozinka = 12345, shema = basic");

Ovdje kon je redovita JDBC veza koja se može koristiti za stvaranje i izvršavanje izraza ili pripremljenih izraza:

probajte (Izjava stmt = con. stmt.execute ("STVORI (baeldung: Tvrtka {naziv: \" Baeldung \ "})" + "- [: posjeduje] -> (tesla: Automobil {make: 'tesla', model: 'modelX'}) "+" RETURN baeldung, tesla ") ResultSet rs = stmt.executeQuery (" MATCH (tvrtka: Tvrtka) - [: posjeduje] -> (car: Car) "+" WHERE car.make = 'tesla 'and car.model =' modelX '"+" RETURN company.name "); while (rs.next ()) {rs.getString (" company.name ");}}

6. Mapiranje objekata-grafikona

Mapiranje objekata-grafikona ili OGM tehnika je koja nam omogućuje upotrebu POJO-a naše domene kao entiteta u Neo4j baza podataka. Ispitajmo kako ovo funkcionira. Prvi korak, kao i obično, dodajemo nove ovisnosti pom.xml:

 org.neo4j neo4j-ogm-core 3.1.2 org.neo4j neo4j-ogm-embedded-driver 3.1.2 

Možete provjeriti OGM Core Link i OGM Embedded Driver Link kako biste provjerili postoje li najnovije verzije ovih knjižnica.

Drugo, svoje POJO bilježimo OGM bilješkama:

@NodeEntity javna klasa Tvrtka {private Long id; privatni naziv niza; @Relationship (type = "posjeduje") privatni automobil; } @NodeEntity javni razred automobila {private Long id; private String make; @Relationship (direction = "INCOMING") tvrtka privatne tvrtke; }

@NodeEntity obavještava Neo4j da će ovaj objekt trebati biti predstavljen čvorom u rezultirajućem grafu. @Odnos priopćava potrebu stvaranja odnosa s čvorom koji predstavlja srodni tip. U ovom slučaju, a društvo posjeduje a automobil.

Imajte na umu da Neo4j zahtijeva da svaki entitet ima primarni ključ s poljem nazvanim iskaznica koji se podižu prema zadanim postavkama. Polje s alternativnim imenom moglo bi se upotrijebiti dodavanjem oznaka sa @Id @GeneratedValue.

Zatim, moramo stvoriti konfiguraciju koja će se koristiti za bootstrap Neo4j'S OGM. Radi jednostavnosti, upotrijebimo ugrađenu bazu podataka samo u memoriji:

Konfiguracija conf = novi Configuration.Builder (). Build ();

Nakon toga inicijaliziramo SjednicaTvornica s konfiguracijom koju smo kreirali i imenom paketa u kojem se nalaze naši označeni POJO:

Tvornica SessionFactory = nova SessionFactory (conf, "com.baeldung.graph");

Napokon, možemo stvoriti a Sjednica i počnite ga koristiti:

Sjednica sesije = factory.openSession (); Car tesla = novi automobil ("tesla", "modelS"); Baeldung tvrtke = nova tvrtka ("baeldung"); baeldung.setCar (tesla); session.save (baeldung);

Ovdje smo pokrenuli sjednicu, stvorili naše POJO-ove i tražili od OGM-ove sjednice da ih nastavi. Neo4j OGM vrijeme izvođenja transparentno pretvorilo objekte u skup Sajfer upiti koji su stvorili odgovarajuće čvorove i rubove u bazi podataka.

Ako se ovaj postupak čini poznatim, to je zato što jest! Upravo tako funkcionira JPA, jedina razlika je u tome hoće li se objekt prevesti u retke koji su zadržani na RDBMS-u ili je niz čvorova i rubova postojao u bazi podataka grafikona.

7. Zaključak

Ovaj je članak proučio neke osnove grafički orijentirane baze podataka Neo4j.

Kao i uvijek, kôd u ovom zapisu dostupan je na Githubu.