diff --git a/pom.xml b/pom.xml index 756d5ce..a3cec51 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ org.neo4j.driver neo4j-java-driver - 5.28.4 + 5.28.5 diff --git a/src/main/resources/examples/Movie.java b/src/main/resources/examples/Movie.java new file mode 100644 index 0000000..a6700e4 --- /dev/null +++ b/src/main/resources/examples/Movie.java @@ -0,0 +1,9 @@ +package com.neo4j.app; + +import java.util.List; + +public record Movie(String movieId, + String title, + List actors) { + +} diff --git a/src/main/resources/examples/ObjectMapping.java b/src/main/resources/examples/ObjectMapping.java new file mode 100644 index 0000000..8c80977 --- /dev/null +++ b/src/main/resources/examples/ObjectMapping.java @@ -0,0 +1,69 @@ +package com.neo4j.app; + +import java.util.Map; + +import org.neo4j.driver.AuthTokens; +import org.neo4j.driver.GraphDatabase; +import com.neo4j.app.Movie; +import com.neo4j.app.Person; + +public class ObjectMapping { + public static void main(String[] args) { + AppProperties.loadProperties(); + + // Create a new Neo4j driver instance + var driver = GraphDatabase.driver( + System.getProperty("NEO4J_URI"), // <1> + AuthTokens.basic( + System.getProperty("NEO4J_USERNAME"), // <2> + System.getProperty("NEO4J_PASSWORD")) + ); + + // Verify the connection + driver.verifyConnectivity(); + + // Execute a Cypher query to find a person + final String personCypher = """ + MATCH (person:Person {name: $name}) + RETURN person + """; + final String name = "Tom Hanks"; + + var person = driver.executableQuery(personCypher) + .withParameters(Map.of("name", name)) + .execute() + .records() + .stream() + .map(record -> record.get("person").as(Person.class)) + .findFirst() + .orElseThrow(() -> new RuntimeException("Person not found")); + + System.out.println(person); + + // Execute a Cypher query to find 1 movie and its actors + final String movieCypher = """ + MATCH (movie:Movie) + LIMIT 1 + RETURN movie { + .*, + actors: COLLECT { + MATCH (actor:Person)-[r:ACTED_IN]->(movie) + RETURN actor + } + } + """; + + var movie = driver.executableQuery(movieCypher) + .execute() + .records() + .stream() + .map(record -> record.get("movie").as(Movie.class)) + .findFirst() + .orElseThrow(() -> new RuntimeException("No movie found")); + + System.out.println(movie); + + // Close the connection + driver.close(); + } +} diff --git a/src/main/resources/examples/Person.java b/src/main/resources/examples/Person.java new file mode 100644 index 0000000..221e2a0 --- /dev/null +++ b/src/main/resources/examples/Person.java @@ -0,0 +1,8 @@ +package com.neo4j.app; + +import java.time.LocalDate; + +public record Person(String imdbId, + String name) { + +}