Além dos repositórios de família de colunas e também de documentos o Artemis também possui o Repository. Essa interface tem como objetivo auxiliar na criação de classes repositórios específicas para as entidades além de facilitar na criação de uma query.
Para utilizar esse recurso é necessário apenas criar uma interface que extenda de Repository.
E injete o recurso, é necessário definir também o qualificador Database que será responsável por dizer para qual tipo de banco a informação será enviada.
Caso seja necessário trabalhar mais de um banco de dados, basta utilizar o qualificador Database e ele será elegível para injeção.
Com isso o Artemis se encarregará de utilizar o apropriado banco de dados e cuidará de implementar os métodos.
Criando Queries com o Repository
Além de salvar e atualizar a informação também é possível recuperar e deletar a informação utilizando methods queries. Com esse intuito o Repository vem com algumas palavras reservadas:
findBy: Como prefixo para encontrar alguma informação
deleteBy: Como prefixo, para deletar alguma informação
Além dos Operadores:
And
Or
Between
LessThan
GreaterThan
LessThanEqual
GreaterThanEqual
Like
OrderBy
OrderBy____Desc
OrderBy_____ASC
Com isso o artemis cuidará de implementar esses métodos.
Utilizando o Repository de forma assíncrona
Para trabalhar de forma assíncrona existe a interface RepositoryAsync, seu funcionamento é semelhante ao Repository.
Ou seja, basta injetá-lo que o Artemis cuidará de implementar os métodos.
Também é possível recuperar e deletar a informação de forma assíncrona, a diferença é que na recuperação um callback é obrigatório no fim do método enquanto para deletar ou remover informação o callback é opcional.
Repository no KeyValue
Assim como a família de colunas e coleção de documentos, chave valor tem o recurso que auxilia tem como objetivo auxiliar na criação de classes repositórios.
Para utilizar esse recurso é necessário apenas criar uma interface que extenda de Repository.
E injete o recurso.
Para isso basta produzir um BucketManager.
Caso seja necessário trabalhar mais de um banco de dados, basta utilizar o qualificador Database e ele será elegível para injeção.
Uma vez que a busca se dá, por padrão, pela busca da chave essa interface não suporte a geração de query, apenas a implementação dos métodos já existente.
O recurso do dynamic query não suportado para o banco de dados do tipo Key-value.
PersonRepository repository = //instance
Person person = new Person();
person.setNickname("diana");
person.setName("Diana Goodness");
List<Person> people = Collections.singletonList(person);
repository.save(person);
repository.save(people);
PersonRepositoryAsync repositoryAsync = //instance
Person person = new Person();
person.setNickname("diana");
person.setName("Diana Goodness");
List<Person> people = Collections.singletonList(person);
repositoryAsync.save(person);
repositoryAsync.save(people);