From a579f6e879fca61bf39a01098bbbe648d65b2fa6 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 26 Nov 2014 18:55:09 +0100 Subject: [PATCH] #35 - Added example for Map-based repositories. --- map/pom.xml | 37 +++++++++++ map/src/main/java/example/Person.java | 39 +++++++++++ .../main/java/example/PersonRepository.java | 37 +++++++++++ .../PersonRepositoryIntegrationTest.java | 65 +++++++++++++++++++ pom.xml | 1 + 5 files changed, 179 insertions(+) create mode 100644 map/pom.xml create mode 100644 map/src/main/java/example/Person.java create mode 100644 map/src/main/java/example/PersonRepository.java create mode 100644 map/src/test/java/example/PersonRepositoryIntegrationTest.java diff --git a/map/pom.xml b/map/pom.xml new file mode 100644 index 00000000..8815fc88 --- /dev/null +++ b/map/pom.xml @@ -0,0 +1,37 @@ + + 4.0.0 + + spring-data-map-repositories-example + + Spring Data - Map repositories example + + + org.springframework.data.examples + spring-data-examples + 1.0.0.BUILD-SNAPSHOT + + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.data + spring-data-keyvalue + 0.1.0.BUILD-SNAPSHOT + + + + + + + spring-libs-snapshot + https://repos.spring.io/libs-snapshot + + + + diff --git a/map/src/main/java/example/Person.java b/map/src/main/java/example/Person.java new file mode 100644 index 00000000..ee964eea --- /dev/null +++ b/map/src/main/java/example/Person.java @@ -0,0 +1,39 @@ +/* + * Copyright 2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package example; + +import java.util.UUID; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import org.springframework.data.annotation.Id; + +/** + * A domain type. + * + * @author Oliver Gierke + */ +@RequiredArgsConstructor +@Getter +@EqualsAndHashCode +public class Person { + + private final @Id UUID id = UUID.randomUUID(); + private final String firstname, lastname; + private final int age; +} diff --git a/map/src/main/java/example/PersonRepository.java b/map/src/main/java/example/PersonRepository.java new file mode 100644 index 00000000..6dd62eab --- /dev/null +++ b/map/src/main/java/example/PersonRepository.java @@ -0,0 +1,37 @@ +/* + * Copyright 2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package example; + +import java.util.List; +import java.util.UUID; + +import org.springframework.data.repository.CrudRepository; + +/** + * A repository for {@link Person} instances. + * + * @author Oliver Gierke + */ +public interface PersonRepository extends CrudRepository { + + /** + * Returns all person older than the given age. + * + * @param age + * @return + */ + List findByAgeGreaterThan(int age); +} diff --git a/map/src/test/java/example/PersonRepositoryIntegrationTest.java b/map/src/test/java/example/PersonRepositoryIntegrationTest.java new file mode 100644 index 00000000..0a59aa0e --- /dev/null +++ b/map/src/test/java/example/PersonRepositoryIntegrationTest.java @@ -0,0 +1,65 @@ +/* + * Copyright 2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package example; + +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.*; + +import java.util.List; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.map.repository.config.EnableMapRepositories; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +/** + * Integration tests for {@link PersonRepository}. + * + * @author Oliver Gierke + */ +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration +public class PersonRepositoryIntegrationTest { + + @Configuration + @EnableMapRepositories + static class Config {} + + @Autowired PersonRepository repository; + + @Test + public void storesPerson() { + + Person person = repository.save(new Person("Dave", "Matthews", 47)); + + assertThat(repository.findOne(person.getId()), is(person)); + } + + @Test + public void findsPersonByAge() { + + Person dave = repository.save(new Person("Dave", "Matthews", 47)); + Person oliver = repository.save(new Person("Oliver August", "Matthews", 7)); + + List result = repository.findByAgeGreaterThan(18); + + assertThat(result, hasItem(dave)); + assertThat(result, not(hasItem(oliver))); + } +} diff --git a/pom.xml b/pom.xml index 209a8c00..b790078c 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,7 @@ jpa + map mongodb multi-store rest