JavaRush /Blogue Java /Random-PT /Adicionando um banco de dados PostgreSQL a um serviço RES...
Artur
Nível 40
Tallinn

Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot. Parte 1

Publicado no grupo Random-PT
Deixe-me começar dizendo que gostei muito da série de artigos de Elleanor Kerry chamada “Visão geral do REST”. Aqui estão links para esses artigos: Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 1No geral, resolvi tomar a liberdade e acrescentar um pouco a eles. Ou seja, diga como criar um banco de dados e conectá-lo a este aplicativo. Por onde começar? Provavelmente do próprio banco de dados. Decidi usar o PostgreSQL porque gostei de sua interface de administração amigável. Primeiro, precisamos baixar o instalador do PostgreSQL, por exemplo aqui: Download do banco de dados PostgreSQL Não descreverei o processo completo de instalação, porque pode ser diferente dependendo do seu sistema operacional. No entanto, observo que no processo você precisará criar uma senha de administrador para a função (conta) padrão do postgres e inseri-la 2 vezes. Para simplificar, defini a senha como 123 . Claro que em projetos reais é necessário inventar algo mais complicado. Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 2Em seguida, o programa de instalação solicita que você selecione uma porta; deixei-a com o valor padrão. Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 3A localidade também foi deixada como padrão. Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 4Instalado e abra a interface do administrador pgAdmin . Um navegador será aberto com uma janela pop-up onde seremos solicitados a inserir a senha criada anteriormente. Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 5Agora precisamos definir o idioma da interface. Para fazer isso, clique em Configurar pgAdmin -> Diversos -> Idioma do usuário , selecione o idioma desejado -> Salvar e recarregue a página do navegador . Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 6No canto superior esquerdo da página, clique em Servidor , aparece a janela “ Conectar ao servidor ” . Digite nossa senha novamente e marque a caixa Salvar senha para não digitá-la todas as vezes. Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 7Poderíamos continuar a usar a função de administrador para todos os bancos de dados, mas seria melhor criar uma nova função, pois podemos ter muitos bancos de dados e muitos programas que os utilizam. Para fazer isso, no canto superior esquerdo, clique em PostgreSQL 12 --> RMB em Login/Group Roles --> Create --> Login/Group Role Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 8 Na janela pop-up, na guia “ Geral ”, insira o nome da função. Nomeei a função root . Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 9Na aba “ Definição ” criamos uma nova senha, deixei 123 só para não confundir. Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 10Vá até a aba “ Direitos ” e marque todos os itens necessários. Eu configurei todos os itens para " SIM ". Clique em “ SalvarAdicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 11Prosseguimos com a criação de um banco de dados. Clique com o botão direito em “Bancos de Dados” --> Criar --> Banco de Dados Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 12 Na aba “ Geral ”, crie o nome do banco de dados. Que sejam, por exemplo, clientes . Atribuímos o proprietário a root , que criamos na etapa anterior. Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 13No "Definição » verifique se temos a codificação definida como UTF8 . Clique em “ Salvar ”. Pronto, nosso banco de dados foi criado (vazio por enquanto). Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 14Neste ponto poderíamos terminar com o pgAdmin, porque... Criaremos tabelas programaticamente, mas, por precaução, mostrarei como criar uma tabela manualmente. Expanda os clientes --> Esquemas --> árvore pública . Clique com o botão direito em Tabelas -> Criar -> Tabela . Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 15Uma janela pop-up será aberta. Na aba “ Geral ”, atribuímos um nome à nossa tabela, por exemplo test_table , e atribuímos root como proprietário . Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 16Vá para a aba “ Colunas ”, clique em “ + ” para criar uma nova coluna. Insira o nome “ id ” e o tipo de dados bigserial , que equivale ao tipo Long em Java, mas com incremento automático (ao adicionar um novo registro, o id aumentará automaticamente em um). Marcamos não-NULL como “ Sim ”, a chave primária também é “ Sim ”. Criamos as colunas “ nome ”, “ e-mail ” e “ telefoneAdicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 17 ” da mesma forma . Selecionamos o tipo de dados caractere variando , isso corresponde ao tipo String , mas permite definir o comprimento máximo. Definimos o comprimento máximo do nome em 200 caracteres para preencher o nome completo. em uma coluna. Definimos o comprimento máximo do e-mail para 254 caracteres. Por que o e-mail tem esse comprimento máximo pode ser encontrado aqui . Para um número de telefone, selecione 20 caracteres, isso deve ser suficiente. Um pouco sobre números de telefone: Equívocos de programadores sobre números de telefone (Habr) Marcamos não-NULL em todas as colunas como “ Sim ” se quisermos que esses dados sejam obrigatórios. Clique em “ Salvar ”. Pronto, a tabela está criada. Para deletar nossa tabela de teste, clique com o botão direito sobre ela (na árvore) e “ deletar ”, pois Não precisamos mais disso, pois criaremos tabelas a partir do nosso programa. Feche o pgAdmin e vá para o nosso programa. Vamos abrir o IDEA com nosso projeto. Clique em Banco de dados na coluna direita da interface, clique em “ + ” para adicionar nosso banco de dados. Próxima fonte de dados -> PostgreSQL . Na janela pop-up, insira no campo Usuário a função root que criamos anteriormente e nossa senhaAdicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 18Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 19123 no campo de senha . No campo Banco de dados escrevemos o nome do banco de dados de nossos clientes . Pressionamos o botão Test Connection e, se virmos uma marca de seleção verde abaixo dele, tudo está em ordem e pressionamos o botão OK . Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 20É isso, nos conectamos ao banco de dados, agora vamos ao arquivo pom.xml e adicionar dependências. Para trabalhar com banco de dados ORM :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Para criar um controlador REST:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Para servidor Tomcat:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
Para PostgreSQL:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.10</version>
</dependency>
Agora que resolvemos o pom.xml, vamos para a pasta de recursos e preencher o arquivo application.properties da seguinte forma:

spring.datasource.url=jdbc:postgresql://localhost:5432/customers
spring.datasource.username=root
spring.datasource.password=123

spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database=postgresql
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL10Dialect
Aqui inserimos a URL do nosso banco de dados, fornecemos o login e senha do mesmo, registramos o driver para PostgreSQL, indicamos que usaríamos o tipo de dados PostgreSQL e especificamos o dialeto para Hibernate. A seguir, vamos criar um novo diretório chamado banco de dados na mesma pasta de recursos . Neste diretório criaremos 2 arquivos: initDB.sql e populateDB.sql . O primeiro será responsável pela criação das tabelas, o segundo será responsável por preenchê-las inicialmente. Vamos abrir initDB.sql e ver uma barra verde no topo que diz que o dialeto SQL não está configurado . Isso significa que não escolhemos um dialeto SQL para nosso projeto (e existem vários deles). Clique no lado direito da mesma faixa na inscrição Alterar dialeto para… . Na janela pop-up, clique em Project SQL Dialect e, como nosso banco de dados é PostgreSQL , selecionamos o dialeto de mesmo nome. Clique em OK. Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot.  Parte 1 - 21 Vamos prosseguir com o preenchimento de nossos arquivos .sql . Vamos primeiro preencher o arquivo initDB.sql :

CREATE TABLE IF NOT EXISTS clients
(
    id    BIGSERIAL PRIMARY KEY ,
    name  VARCHAR(200) NOT NULL ,
    email VARCHAR(254) NOT NULL ,
    phone VARCHAR(20)  NOT NULL
);
Se, após preencher o arquivo, algumas palavras além de clientes estiverem escritas em fonte branca, clique com o botão direito dentro do texto e selecione Alterar Dialeto --> PostgreSQL novamente . Como você provavelmente já entendeu, esses são os mesmos dados que preenchemos ao criar a tabela de teste manualmente. Aqui eles são formatados no dialeto PostgreSQL da linguagem SQL. Agora vamos preencher o arquivo populateDB.sql :

INSERT INTO clients VALUES
(1, 'Vassily Petrov', 'vpetrov@jr.com', '+7 (191) 322-22-33)'),
(2, 'Pjotr Vasechkin', 'pvasechkin@jr.com', '+7 (191) 223-33-22)');
Se o nome da tabela de seus clientes estiver escrito em letras vermelhas, tudo bem. A questão é que ainda não criamos esta tabela e o IDEA ainda não a reconhece. Para criar e preencher a tabela, precisamos voltar ao arquivo application.properties e adicionar as três linhas a seguir:

spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
Nestas linhas dizemos que queremos inicializar o banco de dados programaticamente e indicamos quais arquivos precisam ser utilizados para isso. Em seguida, vá para o método principal do nosso aplicativo e execute-o . Depois disso, vá para pgAdmin --> Servers --> PostgreSQL 12 --> Databases --> clients --> Schemas --> public , clique com o botão direito em " Tables ", " Update ". Se tudo correr bem, veremos a tabela de clientes que criamos . Depois disso, volte ao arquivo application.properties e comente a linha.

spring.datasource.data=classpath*:database/populateDB.sql
como abaixo:

spring.datasource.url=jdbc:postgresql://localhost:5432/customers
spring.datasource.username=root
spring.datasource.password=123

spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database=postgresql
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL10Dialect

spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
#spring.datasource.data=classpath*:database/populateDB.sql
Se não fizermos isso, na próxima vez que executarmos o programa, receberemos o seguinte erro: org.postgresql.util.PSQLException: ERROR: A duplicate key value violas the unique restrição "clients_pkey" . Isso acontece porque já preenchemos os campos com id 1 e 2 na tabela (ainda no primeiro lançamento). Na tabela que criamos, o campo id é especificado como bigserial , que corresponde ao tipo Long em Java. Porém, em nosso programa o tipo deste campo é Integer . Resolvi mostrar como usar Long (BIGSERIAL) porque ele possui um alcance maior que Integer. O fato é que nas tabelas, um campo designado como Chave Primária pode ser usado não apenas para armazenar IDs de usuários , mas também para armazenar índices de uma ampla variedade de dados, e o número desses registros pode exceder o valor inteiro máximo. Por exemplo, se nosso programa fizer algumas medições a cada segundo e gravar os dados em uma tabela. Para reescrever nossas classes para usar o tipo de dados Long, precisamos alterar o tipo de Integer para Long em todas as classes e métodos que usam o campo id . Não faremos isso, porque o programa foi originalmente escrito pelo autor para o tipo id Integer, o que significa que faz algum sentido. Para continuar, vamos mais uma vez remover a tabela de clientes que criamos do nosso banco de dados, mas agora tentaremos fazer isso de forma programática em vez de manualmente. Para fazer isso, comente nosso código no arquivo initDB.sql e adicione uma linha:

-- CREATE TABLE IF NOT EXISTS clients
-- (
--     id    BIGSERIAL PRIMARY KEY ,
--     name  VARCHAR(200) NOT NULL ,
--     email VARCHAR(254) NOT NULL ,
--     phone VARCHAR(20)  NOT NULL
-- );
DROP TABLE IF EXISTS clients
Vamos iniciar o programa, ir em pgAdmin , clicar com o botão direito em “ Tabelas ” (na base de dados de nossos clientes ) ->Atualizar ”, e veremos que nossa tabela desapareceu. Atenção! Tenha cuidado ao usar este comando, caso contrário você corre o risco de perder todos os dados que tinha na sua tabela! Vamos voltar ao arquivo initDB.sql e reescrevê-lo da seguinte forma:

CREATE TABLE IF NOT EXISTS clients
(
    id    SERIAL PRIMARY KEY ,
    name  VARCHAR(200) NOT NULL ,
    email VARCHAR(254) NOT NULL ,
    phone VARCHAR(50)  NOT NULL
);
Aqui alteramos o tipo de id para SERIAL , que corresponde ao tipo Integer que estamos usando para o campo id em nosso programa. Além disso, o comprimento máximo do campo telefone foi aumentado para que possamos utilizar livremente espaços e caracteres especiais (parênteses, travessões, etc.) em sua escrita. O número máximo de dígitos em um número de telefone é atualmente de 18 dígitos (se não me falha a memória). Defino o tamanho para 50 caracteres para ter certeza. Vamos ao arquivo application.properties e descomente a linha:

spring.datasource.data=classpath*:database/populateDB.sql
Vamos executar nosso programa, acessar o pgAdmin, verificar se nossa tabela foi criada e comentar esta linha novamente.

#spring.datasource.data=classpath*:database/populateDB.sql
É aqui que provavelmente terminarei a primeira parte do artigo. Espero que gostem, escrevam comentários (mesmo que não tenham gostado). Na segunda parte, reescreveremos nossas classes para que possam trabalhar com bancos de dados reais. Continuação: Adicionando um banco de dados PostgreSQL a um serviço RESTful no Spring Boot. Parte 2 UPD Obrigado aos moderadores por corrigirem minhas fotos e formatação de texto!
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION