Skip to content

Commit d9dfb81

Browse files
committed
spring-projects#134 - Added example for using Optional as query method parameter.
Got rid of Guava dependency in favor of JDK 8's Optional. Upgraded basic JPA example to Spring Data Hopper to get access to the newly introduced functionality.
1 parent 549ae7f commit d9dfb81

File tree

3 files changed

+16
-17
lines changed

3 files changed

+16
-17
lines changed

jpa/example/pom.xml

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,9 @@
1313

1414
<name>Spring Data JPA - Example</name>
1515
<description>Small sample project showing the usage of Spring Data JPA.</description>
16-
17-
<dependencies>
18-
19-
<dependency>
20-
<groupId>com.google.guava</groupId>
21-
<artifactId>guava</artifactId>
22-
<version>16.0.1</version>
23-
</dependency>
24-
25-
</dependencies>
16+
<properties>
17+
<spring-data-releasetrain.version>Hopper-BUILD-SNAPSHOT</spring-data-releasetrain.version>
18+
</properties>
2619

2720
<build>
2821
<plugins>

jpa/example/src/main/java/example/springdata/jpa/simple/SimpleUserRepository.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,14 @@
1616
package example.springdata.jpa.simple;
1717

1818
import java.util.List;
19+
import java.util.Optional;
1920

2021
import org.springframework.data.domain.Pageable;
2122
import org.springframework.data.domain.Slice;
2223
import org.springframework.data.domain.Sort;
2324
import org.springframework.data.jpa.repository.Query;
2425
import org.springframework.data.repository.CrudRepository;
2526

26-
import com.google.common.base.Optional;
27-
2827
/**
2928
* Simple repository interface for {@link User} instances. The interface is used to declare so called query methods,
3029
* methods to retrieve single entities or collections of them.
@@ -44,7 +43,13 @@ public interface SimpleUserRepository extends CrudRepository<User, Long> {
4443
*/
4544
User findByTheUsersName(String username);
4645

47-
Optional<User> findByUsername(String username);
46+
/**
47+
* Uses {@link Optional} as return and parameter type.
48+
*
49+
* @param username
50+
* @return
51+
*/
52+
Optional<User> findByUsername(Optional<String> username);
4853

4954
/**
5055
* Find all users with the given lastname. This method will be translated into a query by constructing it directly
@@ -67,7 +72,7 @@ public interface SimpleUserRepository extends CrudRepository<User, Long> {
6772

6873
/**
6974
* Returns all users with the given name as first- or lastname. This makes the query to method relation much more
70-
* refactoring safe as the order of the method parameters is completely irrelevant.
75+
* refactoring-safe as the order of the method parameters is completely irrelevant.
7176
*
7277
* @param name
7378
* @return

jpa/example/src/test/java/example/springdata/jpa/simple/SimpleUserRepositoryTests.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.ArrayList;
2323
import java.util.Arrays;
2424
import java.util.List;
25+
import java.util.Optional;
2526

2627
import org.junit.Before;
2728
import org.junit.Test;
@@ -88,13 +89,13 @@ public void findByFirstnameOrLastname() throws Exception {
8889
}
8990

9091
@Test
91-
public void useGuavaOptionalInsteadOfNulls() {
92+
public void useOptionalAsReturnAndParameterType() {
9293

93-
assertThat(repository.findByUsername("foobar").isPresent(), is(false));
94+
assertThat(repository.findByUsername(Optional.of("foobar")), is(Optional.empty()));
9495

9596
repository.save(user);
9697

97-
assertThat(repository.findByUsername("foobar").isPresent(), is(true));
98+
assertThat(repository.findByUsername(Optional.of("foobar")).isPresent(), is(true));
9899
}
99100

100101
@Test

0 commit comments

Comments
 (0)