No ano passado, comecei a aprender Kotlin e fiquei surpreso com a facilidade de converter um aplicativo Java. O IntelliJ e alguns outros IDEs oferecem boas ferramentas para conversão automática e, com alguns ajustes, você pode obter um código muito mais conciso e menos propenso a erros.

Por isso, decidi criar um aplicativo de amostra para mostrar minha nova combinação favorita: Kotlin, Spring Boot, Spring Data e Couchbase:

Criação de um serviço de perfil de usuário

Você pode clonar o projeto inteiro aqui:

https://github.com/couchbaselabs/try-cb-kotlin

Vamos começar criando nossa classe principal:

 Observação: Sua classe deve ser aberto Caso contrário, você receberá o seguinte erro:

Aqui está nossa entidade de usuário, que é muito semelhante a o de Java:

  • @Document: A anotação do Couchbase que define uma entidade, semelhante a @Entidade em JPA. O Couchbase adicionará automaticamente uma propriedade chamada _classe no documento para usá-lo como o tipo de documento.
  • @Id: A chave do documento
  • @Campo: As anotações do Couchbase, semelhantes às do JPA @Coluna. Não é obrigatório, mas recomendamos usá-lo.

O mapeamento de atributos no Couchbase é muito simples. Eles serão mapeados diretamente para a estrutura correspondente no JSON:

  • Propriedades simples: Mapeamento direto para JSON:

  • Matrizes: Como é de se esperar, matrizes como funções de segurança serão convertidos em matrizes JSON: 

 

  • Entidades aninhadas: Você odeia mapear @ManyToOne relacionamentos? Eu também. Como estamos usando um banco de dados de documentos, não há mais necessidade de escrever esses relacionamentos; as entidades aninhadas também são traduzidas diretamente para JSON.

Repositórios

Agora, vamos dar uma olhada em como será o nosso repositório:

 

  • @N1qlPrimaryIndexed: Este anotação garante que o bucket associado ao repositório atual terá um índice primário N1QL
  • @ViewIndexed:  Isso anotação permite que você defina o nome do documento de design e o nome da visualização, bem como um mapa personalizado e uma função de redução.

Como você pode ver abaixo, é possível aproveitar todos os Palavras-chave do Spring Data para consultar o banco de dados, como EncontrarEntreIsGreaterThanComo, Existeetc.

O repositório está ampliando CouchbasePagingAndSortingRepositoryque permite que você pagine suas consultas simplesmente adicionando um Paginável param no final da definição do método. Se precisar escrever consultas mais avançadas, você também pode usar o N1QL:

As consultas acima têm algumas sugestões de sintaxe para torná-las menores:

  • #(#n1ql.bucket): O uso desta sintaxe evita a codificação do nome do bucket em sua consulta
  • #{#n1ql.selectEntity}: açúcar-sintaxe para SELECT * FROM #(#n1ql.bucket):
  • #{#n1ql.filter}: syntax-sugar para filtrar o documento por tipo, o que tecnicamente significa class = 'myPackage.MyClassName' (_classe é o atributo adicionado automaticamente ao documento para definir seu tipo quando você está trabalhando com o Couchbase no Spring Data )
  • #{#n1ql.fields} será substituído pela lista de campos (por exemplo, para uma cláusula SELECT) necessária para reconstruir a entidade.
  • #{#n1ql.delete} será substituído pela instrução delete from.
  • #{#n1ql.returning} será substituído pela cláusula de retorno necessária para a reconstrução da entidade.

Serviços

Nosso serviço basicamente encaminha solicitações para o nosso repositório, mas se você precisar escrever consultas ad-hoc, este é o lugar certo:

Controladores

Por fim, vamos adicionar também um controlador para testar nossos serviços via rest:

Escrevendo testes de integração com Kotlin

Para executar os testes de integração corretamente, não se esqueça de configurar as credenciais de seu banco de dados na seção application.properties file:

Aqui, você pode ver a aparência de nossos testes:

Dependências de Kotlin e Maven

O Kotlin está evoluindo rapidamente, portanto, lembre-se de usar as versões mais recentes de cada dependência:

Você pode visualizar todo o pom.xml aqui.

Autor

Postado por Denis Rosa, defensor dos desenvolvedores, Couchbase

Denis Rosa é um Developer Advocate do Couchbase e mora em Munique, na Alemanha. Ele tem uma sólida experiência como engenheiro de software e fala fluentemente Java, Python, Scala e Javascript. Denis gosta de escrever sobre pesquisa, Big Data, IA, microsserviços e tudo o mais que possa ajudar os desenvolvedores a criar um aplicativo bonito, mais rápido, estável e escalável.

Deixar uma resposta