Spring Data Neo4j was the first Spring Data project, started by the CEOs Rod Johnson and Emil Eifrem. It enables convenient integration of Neo4j in your Spring-based application. It provides object-graph mapping functionality and other features common to the Spring Data projects.
Note
|
This project uses Spring Data Neo4j 4 which is a complete rewrite from earlier versions. It is optimized for working with Neo4j and based on Neo4j’s query language, Cypher. |
To use Neo4j with Spring Data Neo4j, you just add the dependency for Spring-Boot and Spring-Data-Neo4j to your build setup.
link:pom.xml[role=include]
After setting up a Java-based Spring-Boot configuration,
link:src/main/java/movies/spring/data/neo4j/MyNeo4jConfiguration.java[role=include]
and annotating your @Node-
and @RelationshipEntity
, you can use the Neo4jTemplate
to access Neo4j APIs and object graph mapping functionality.
link:src/main/java/movies/spring/data/neo4j/domain/Movie.java[role=include]
Additionally you can leverage the convenient Spring-Data repositories to get interface-based DAO implementations injected into your Spring Components.
link:src/main/java/movies/spring/data/neo4j/repositories/MovieRepository.java[role=include]
In our case we use the repository from a MovieService
to compute the graph representation for the visualization.
The service is then injected into our main Boot application, which also doubles as @RestMvcController
which exposes the /graph
endpoint.
The other two endpoints for finding multiple movies by title and loading a single movie are provided out of the box by the Spring-Data-Rest project which exposes our MovieRepository
as REST endpoints.
The rendering of the movie objects (and related entities) happens automatically out of the box via Jackson mapping.
To avoid circular JSON generation, the JSOGGenerator
is used as id-generator.
See the {github}/examples/java/spring-data-neo4j[GitHub repository] for the source code.
These are the components of our Web Application:
-
Application Type: Spring-Boot Java Web Application (Jetty)
-
Web framework: Spring-Boot enabled Spring-WebMVC, Spring-Data-Rest
-
Persistence Access: Spring-Data-Neo4j 4.0
-
Database: Neo4j-Server
-
Frontend: jquery, bootstrap, d3.js
Get Movie
// JSON object for single movie with cast curl http://localhost:8080/movies/search/findByTitle?title=The%20Matrix // list of JSON objects for movie search results curl http://localhost:8080/movies/search/findByTitleContaining?title=matrix // JSON object for whole graph viz (nodes, links - arrays) curl http://localhost:8080/graph