Merge Java 8 samples into basic one.

This commit is contained in:
Mark Paluch
2021-04-28 10:57:59 +02:00
parent 20dfd398c8
commit b44dc3dea1
24 changed files with 44 additions and 286 deletions

View File

@@ -0,0 +1,25 @@
/*
* Copyright 2021 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.springdata.cassandra.streamoptional;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author Mark Paluch
*/
@SpringBootApplication
class CassandraConfiguration {
}

View File

@@ -0,0 +1,40 @@
/*
* Copyright 2021 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.springdata.cassandra.streamoptional;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.ZoneId;
import org.springframework.data.annotation.Id;
import org.springframework.data.cassandra.core.mapping.Table;
/**
* @author Mark Paluch
*/
@Table("pizza_orders")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Order {
@Id String id;
LocalDate orderDate;
ZoneId zoneId;
}

View File

@@ -0,0 +1,40 @@
/*
* Copyright 2021 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.springdata.cassandra.streamoptional;
import java.time.LocalDate;
import java.time.ZoneId;
import org.springframework.data.cassandra.repository.Query;
import org.springframework.data.repository.Repository;
/**
* Repository to manage {@link Order} instances.
*
* @author Mark Paluch
*/
public interface OrderRepository extends Repository<Order, String> {
/**
* Method parameters are converted according the registered Converters into Cassandra types.
*/
@Query("SELECT * from pizza_orders WHERE orderdate = ?0 and zoneid = ?1 ALLOW FILTERING")
Order findOrderByOrderDateAndZoneId(LocalDate orderDate, ZoneId zoneId);
void deleteAll();
Order save(Order order);
}

View File

@@ -0,0 +1,37 @@
/*
* Copyright 2021 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.springdata.cassandra.streamoptional;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.cassandra.core.mapping.Table;
/**
* @author Mark Paluch
*/
@Table
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
@Id String id;
String firstname, lastname;
}

View File

@@ -0,0 +1,57 @@
/*
* Copyright 2021 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.springdata.cassandra.streamoptional;
import java.util.Optional;
import java.util.stream.Stream;
import org.springframework.data.cassandra.repository.Query;
import org.springframework.data.repository.Repository;
/**
* Repository to manage {@link Person} instances.
*
* @author Mark Paluch
*/
public interface PersonRepository extends Repository<Person, String> {
Optional<Person> findById(String id);
Stream<Person> findAll();
/**
* Sample method to derive a query from using JDK 8's {@link Optional} as return type.
*
* @param id
* @return
*/
@Query("select * from person where id = ?0")
Optional<Person> findPersonById(String id);
/**
* Sample default method to show JDK 8 feature support.
*
* @param person
* @return
*/
default Optional<Person> findByPerson(Person person) {
return findPersonById(person == null ? null : person.id);
}
void deleteAll();
Person save(Person person);
}

View File

@@ -0,0 +1,20 @@
/*
* Copyright 2021 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 showing Java 8 features.
*/
package example.springdata.cassandra.streamoptional;

View File

@@ -0,0 +1,54 @@
/*
* Copyright 2021 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.springdata.cassandra.streamoptional;
import example.springdata.cassandra.util.CassandraKeyspace;
import java.time.LocalDate;
import java.time.ZoneId;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
/**
* Integration test to show the usage of JSR-310 date/time types with Spring Data Cassandra.
*
* @author Mark Paluch
*/
@CassandraKeyspace
@SpringBootTest(classes = CassandraConfiguration.class)
class Jsr310IntegrationTests {
@Autowired OrderRepository repository;
@BeforeEach
void setUp() throws Exception {
repository.deleteAll();
}
@Test
void findOneByJsr310Types() {
var order = new Order("42", LocalDate.now(), ZoneId.systemDefault());
repository.save(order);
assertThat(repository.findOrderByOrderDateAndZoneId(order.getOrderDate(), order.getZoneId())).isEqualTo(order);
}
}

View File

@@ -0,0 +1,81 @@
/*
* Copyright 2021 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.springdata.cassandra.streamoptional;
import static org.assertj.core.api.Assertions.*;
import example.springdata.cassandra.util.CassandraKeyspace;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
/**
* Integration test to show the usage of Java {@link Stream} and {@link Optional} features with Spring Data Cassandra.
*
* @author Mark Paluch
*/
@CassandraKeyspace
@SpringBootTest(classes = CassandraConfiguration.class)
class StreamOptionalIntegrationTests {
@Autowired PersonRepository repository;
@BeforeEach
void setUp() throws Exception {
repository.deleteAll();
}
@Test
void providesFindOneWithOptional() {
var homer = repository.save(new Person("1", "Homer", "Simpson"));
assertThat(repository.findById(homer.id).isPresent()).isTrue();
assertThat(repository.findById(homer.id + 1)).isEqualTo(Optional.<Person> empty());
}
@Test
void invokesDefaultMethod() {
var homer = repository.save(new Person("1", "Homer", "Simpson"));
var result = repository.findByPerson(homer);
assertThat(result.isPresent()).isTrue();
assertThat(result.get()).isEqualTo(homer);
}
/**
* Streaming data from the store by using a repository method that returns a {@link Stream}. Note, that since the
* resulting {@link Stream} contains state it needs to be closed explicitly after use!
*/
@Test
void useJava8StreamsWithCustomQuery() {
var homer = repository.save(new Person("1", "Homer", "Simpson"));
var bart = repository.save(new Person("2", "Bart", "Simpson"));
try (var stream = repository.findAll()) {
assertThat(stream.collect(Collectors.toList())).contains(homer, bart);
}
}
}