111 lines
3.4 KiB
Plaintext
111 lines
3.4 KiB
Plaintext
= Spring Data Neo4j⚡️RX
|
||
:sectanchors:
|
||
|
||
// tag::versions[]
|
||
:spring-data-neo4j-rx_version: 1.0.0-beta01
|
||
:groupId: org.neo4j.springframework.data
|
||
:artifactId: spring-data-neo4j-rx
|
||
:artifactIdStarter: spring-data-neo4j-rx-spring-boot-starter
|
||
:neo4j_version: 4.0.0-alpha09
|
||
:spring-boot_version: 2.2.0.RC1
|
||
// end::versions[]
|
||
|
||
image:https://img.shields.io/maven-central/v/org.neo4j.springframework.data/spring-data-neo4j-rx.svg[Maven Central,link=http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.neo4j.springframework.data%22%20AND%20a%3A%22spring-data-neo4j-rx%22]
|
||
|
||
[abstract]
|
||
--
|
||
Spring Data Neo4j⚡️RX - or in short _SDN/RX_ - is an ongoing effort to create the next generation of Spring Data Neo4j, with full reactive support and lightweight mapping.
|
||
SDN/RX will work with immutable entities, regardless whether written in Java or Kotlin.
|
||
--
|
||
|
||
The primary goal of the https://projects.spring.io/spring-data[Spring Data] project is to make it easier to build Spring-powered applications that use new data access technologies such as non-relational databases, map-reduce frameworks, and cloud based data services.
|
||
|
||
The SDN/RX project aims to provide a familiar and consistent Spring-based programming model for integrating with the https://neo4j.com/[Neo4j] Graph Database.
|
||
|
||
== Manual
|
||
|
||
For a gentle introduction and some getting started guides, please use our
|
||
link:docs/manual.adoc[Manual].
|
||
|
||
== Getting Started
|
||
|
||
Here is a quick teaser of a reactive application using Spring Data Repositories in Java, without using Spring Boot.
|
||
|
||
[source,java]
|
||
----
|
||
@Node
|
||
public class Person {
|
||
private Long id;
|
||
private String name;
|
||
|
||
public Person(String name) {
|
||
this.name = name;
|
||
}
|
||
}
|
||
|
||
@Repository
|
||
interface PersonRepository extends ReactiveNeo4jRepository<Person, Long> {
|
||
|
||
Flux<Person> findAllByName(String name);
|
||
|
||
Flux<Person> findAllByNameLike(String name);
|
||
}
|
||
|
||
@Service
|
||
class MyService {
|
||
|
||
@Autowired
|
||
private final PersonRepository repository;
|
||
|
||
@Transactional
|
||
public Flux<Person> doWork() {
|
||
|
||
Person emil = new Person("Emil");
|
||
Person gerrit = new Person("Gerrit");
|
||
Person michael = new Person("Michael");
|
||
|
||
// Persist entities and relationships to graph database
|
||
return repository.saveAll(Flux.just(emil, gerrit, michael));
|
||
}
|
||
}
|
||
|
||
@Configuration
|
||
@EnableReactiveNeo4jRepositories
|
||
@EnableTransactionManagement
|
||
class MyConfiguration extends AbstractReactiveNeo4jConfig {
|
||
|
||
@Bean
|
||
public Driver driver() {
|
||
return GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j", "passphrase"));
|
||
}
|
||
|
||
@Override
|
||
protected Collection<String> getMappingBasePackages() {
|
||
return Collections.singletonList(Person.class.getPackage().getName());
|
||
}
|
||
}
|
||
----
|
||
|
||
TIP: SDN/RX is not only about reactive support, all features are available in both ways: Imperative and reactive, we
|
||
only prefer to showcase the new reactive database access support here.
|
||
|
||
=== Maven configuration
|
||
|
||
Add the Maven dependency:
|
||
|
||
[source,xml,subs="verbatim,attributes"]
|
||
----
|
||
<dependency>
|
||
<groupId>{groupId}</groupId>
|
||
<artifactId>{artifactId}</artifactId>
|
||
<version>{spring-data-neo4j-rx_version}</version>
|
||
</dependency>
|
||
----
|
||
|
||
Nowadays, people prefer Spring Boot and we got you covered with a starter.
|
||
Please consult our link:docs/manual.adoc[manual] for more information.
|
||
|
||
=== Building SDN/RX
|
||
|
||
Please have a look at the documentation: link:docs/build.adoc[Building SDN/RX].
|