Repository API
Работа со Spring Data Repository API
Чтобы определить интерфейс репозитория, необходимо сконфигурировать клиент с помощью аннотации
@EnableTarantoolRepositories. Пример конфигурации можно найти
здесь: конфигурирование клиентов. Интерфейс репозитория должен быть
типизирован классом модели данных и типом идентификатора (ID type).
Создание класса модели данных
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.springframework.data.annotation.Id;
@JsonFormat(shape = JsonFormat.Shape.ARRAY)
@JsonIgnoreProperties(ignoreUnknown = true) // for example bucket_id
@KeySpace("person")
public class Person {
@Id
@JsonProperty("id")
public Integer id;
@Field("is_married")
@JsonProperty("isMarried")
public Boolean isMarried;
@JsonProperty("name")
public String name;
// constructors, getters, setters
}
Важно
Классы моделей данных должны обязательно аннотироваться
@JsonFormat(shape = JsonFormat.Shape.ARRAY) для правильной сериализации и десериализации.
Важно
Аннотация @KeySpace("person") позволяет указать, какой space в Tarantool связан с данным
классом модели данных. Если аннотация будет опущена, то название класса интерпретируется как
название space. (Для примера выше: с аннотацией: "person"; без аннотации: результат работы
функции Person.class.getName())
Важно
Аннотация @Field позволяет задать название поля, которое будет использовано для работы с
Tarantool. Без аннотации название поля класса будет интерпретироваться как название поля
space (Для примера выше: с аннотацией: "is_married"; без аннотации: "isMarried")
Важно
Аннотация @JsonProperty позволяет задать название поля, которое будет использовано для работы
с Jackson. Без аннотации возможны ситуации когда jackson создаст неправильный порядок полей.
Особенно это может произойти если поля приватные, и используется библиотека Lombok для
генерации сеттеров полей. Jackson может не увидеть сеттер, если в сгенерированном сеттере нет
регистрозависимого вхождения названия поля.
Создание пользовательского Repository
import org.springframework.data.repository.PagingAndSortingRepository;
public interface PersonRepository extends PagingAndSortingRepository<Person, Integer> {}
Таким образом, пользовательский Repository будет наследовать функциональность CrudRepository.
К примеру, мы можем сохранить экземпляр Person, а после получить его по идентификатору:
import org.springframework.stereotype.Service;
@Service
public class PersonService {
private PersonRepository repository;
public PersonService(PersonRepository repository) {
this.repository = repository;
}
public Person savePerson(Person person) {
return this.repository.save(person);
}
public Optional<Person> selectPersonById(int id) {
return this.repository.findById(id);
}
}