From 5ba65308a76c21d4737738d2503d1e1d592b919a Mon Sep 17 00:00:00 2001 From: Chandana Kithalagama Date: Thu, 4 May 2017 06:28:23 +1000 Subject: [PATCH] #265 - Add example for Spring Data Couchbase. Original pull request: #275. --- couchbase/example/pom.xml | 28 +++++++ .../couchbase/CouchbaseConfiguration.java | 35 ++++++++ .../springdata/couchbase/model/Airline.java | 40 +++++++++ .../repository/AirlineRepository.java | 18 ++++ .../AirlineRepositoryIntegrationTest.java | 84 +++++++++++++++++++ couchbase/pom.xml | 30 +++++++ pom.xml | 1 + 7 files changed, 236 insertions(+) create mode 100644 couchbase/example/pom.xml create mode 100644 couchbase/example/src/main/java/example/springdata/couchbase/CouchbaseConfiguration.java create mode 100644 couchbase/example/src/main/java/example/springdata/couchbase/model/Airline.java create mode 100644 couchbase/example/src/main/java/example/springdata/couchbase/repository/AirlineRepository.java create mode 100644 couchbase/example/src/test/java/example/springdata/couchbase/repository/AirlineRepositoryIntegrationTest.java create mode 100644 couchbase/pom.xml diff --git a/couchbase/example/pom.xml b/couchbase/example/pom.xml new file mode 100644 index 00000000..f384dc3e --- /dev/null +++ b/couchbase/example/pom.xml @@ -0,0 +1,28 @@ + + 4.0.0 + + spring-data-couchbase-example + Basic sample for Spring Data Couchbase + + + spring-data-couchbase-examples + org.springframework.data.examples + 1.0.0.BUILD-SNAPSHOT + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest* + + + + + + + diff --git a/couchbase/example/src/main/java/example/springdata/couchbase/CouchbaseConfiguration.java b/couchbase/example/src/main/java/example/springdata/couchbase/CouchbaseConfiguration.java new file mode 100644 index 00000000..f8433a39 --- /dev/null +++ b/couchbase/example/src/main/java/example/springdata/couchbase/CouchbaseConfiguration.java @@ -0,0 +1,35 @@ +package example.springdata.couchbase; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.couchbase.config.AbstractCouchbaseConfiguration; +import org.springframework.data.couchbase.repository.config.EnableCouchbaseRepositories; + +import java.util.Collections; +import java.util.List; + +/** + * Couchbase Configuration to connect to Couchbase data store + * + * @author Chandana Kithalagama + */ +@SpringBootApplication +@Configuration +@EnableCouchbaseRepositories +public class CouchbaseConfiguration extends AbstractCouchbaseConfiguration { + + @Override + protected List getBootstrapHosts() { + return Collections.singletonList("192.168.99.100"); + } + + @Override + protected String getBucketName() { + return "travel-sample"; + } + + @Override + protected String getBucketPassword() { + return ""; + } +} diff --git a/couchbase/example/src/main/java/example/springdata/couchbase/model/Airline.java b/couchbase/example/src/main/java/example/springdata/couchbase/model/Airline.java new file mode 100644 index 00000000..4a13d9e7 --- /dev/null +++ b/couchbase/example/src/main/java/example/springdata/couchbase/model/Airline.java @@ -0,0 +1,40 @@ +package example.springdata.couchbase.model; + +import com.couchbase.client.java.repository.annotation.Field; +import com.couchbase.client.java.repository.annotation.Id; +import lombok.*; +import org.springframework.data.couchbase.core.mapping.Document; + +/** + * A domain object representing an Airline + * + * @author Chandana Kithalagama + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Document +public class Airline { + + @Id + private int id; + + @Field + private String type; + + @Field + private String name; + + @Field("iata") + private String iataCode; + + @Field + private String icao; + + @Field + private String callsign; + + @Field + private String country; + +} diff --git a/couchbase/example/src/main/java/example/springdata/couchbase/repository/AirlineRepository.java b/couchbase/example/src/main/java/example/springdata/couchbase/repository/AirlineRepository.java new file mode 100644 index 00000000..0a5b07e0 --- /dev/null +++ b/couchbase/example/src/main/java/example/springdata/couchbase/repository/AirlineRepository.java @@ -0,0 +1,18 @@ +package example.springdata.couchbase.repository; + +import example.springdata.couchbase.model.Airline; +import org.springframework.data.couchbase.core.query.Query; +import org.springframework.data.repository.CrudRepository; + +import java.util.List; + +/** + * Repository interface to manage {@link Airline} instances. + * + * @author Chandana Kithalagama + */ +public interface AirlineRepository extends CrudRepository{ + + @Query("#{#n1ql.selectEntity} WHERE #{#n1ql.filter} AND name = $1") + List findAirlineByName(String name); +} diff --git a/couchbase/example/src/test/java/example/springdata/couchbase/repository/AirlineRepositoryIntegrationTest.java b/couchbase/example/src/test/java/example/springdata/couchbase/repository/AirlineRepositoryIntegrationTest.java new file mode 100644 index 00000000..31ae448e --- /dev/null +++ b/couchbase/example/src/test/java/example/springdata/couchbase/repository/AirlineRepositoryIntegrationTest.java @@ -0,0 +1,84 @@ +package example.springdata.couchbase.repository; + +import example.springdata.couchbase.CouchbaseConfiguration; +import example.springdata.couchbase.model.Airline; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Unit tests for basic CRUD operations + * + * @author Chandana Kithalagama + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = CouchbaseConfiguration.class) +public class AirlineRepositoryIntegrationTest { + + @Autowired + AirlineRepository airlineRepository; + Airline a, b, c; + List airlineList; + + @Before + public void setup() { + a = new Airline(20000,"airline", "CK 1", "LK", "CMB", "CLK","Sri Lanka"); + b = new Airline(20001,"airline", "CK 2", "LK", "CMB", "CLK","Sri Lanka"); + c = new Airline(20002,"airline", "CK 3", "LK", "CMB", "CLK","Sri Lanka"); + + airlineList = Arrays.asList(a, b, b); + } + + @Test + public void testSaveAirline() { + Iterable itr = airlineRepository.save(Arrays.asList(a)); + assertThat(itr).isNotNull(); + Airline airline = airlineRepository.findOne(a.getId()); + assertThat(airline).isNotNull(); + assertThat(airline).isEqualTo(a); + assertThat(airline).isNotEqualTo(b); + airlineRepository.delete(a.getId()); + } + + @Test + public void testGetAllAirlines() { + Iterable itr = airlineRepository.save(airlineList); + assertThat(itr).isNotNull(); + Iterable itr2 = airlineRepository.findAll(Arrays.asList(a.getId(), b.getId(), c.getId())); + assertThat(itr2).isNotNull(); + airlineRepository.delete(airlineList); + } + + @Test + public void testDeleteAirlines() { + Iterable itr = airlineRepository.save(Arrays.asList(a)); + assertThat(itr).isNotNull(); + airlineRepository.delete(a.getId()); + Airline airline = airlineRepository.findOne(a.getId()); + assertThat(airline).isNull(); + } + + @Test + public void testGetByName() { + Iterable itr = airlineRepository.save(Arrays.asList(a)); + assertThat(itr).isNotNull(); + List airlines = airlineRepository.findAirlineByName(a.getName()); + assertThat(airlines.size()).isGreaterThanOrEqualTo(1); + assertThat(airlines.get(0)).isEqualTo(a); + airlineRepository.delete(a.getId()); + } + + @After + public void tearDown() { + airlineRepository.delete(airlineList); + } +} diff --git a/couchbase/pom.xml b/couchbase/pom.xml new file mode 100644 index 00000000..9627c0f4 --- /dev/null +++ b/couchbase/pom.xml @@ -0,0 +1,30 @@ + + 4.0.0 + + spring-data-couchbase-examples + pom + + + spring-data-examples + org.springframework.data.examples + 1.0.0.BUILD-SNAPSHOT + + + Spring Data Couchbase - Examples + Sample projects for Spring Data Couchbase + https://github.com/spring-projects/spring-data-couchbase + + + example + + + + + + org.springframework.boot + spring-boot-starter-data-couchbase + + + + diff --git a/pom.xml b/pom.xml index eeed5318..24fc50f1 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,7 @@ redis solr web + couchbase