JavaRush /Blog Java /Random-ES /Agregar una base de datos PostgreSQL a un servicio RESTfu...
Artur
Nivel 40
Tallinn

Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot. Parte 1

Publicado en el grupo Random-ES
Permítanme comenzar diciendo que realmente disfruté la serie de artículos de Elleanor Kerry llamada "REST Overview". Aquí hay enlaces a estos artículos: Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 1En general, decidí tomarme la libertad y agregarles un poco. Es decir, diga cómo crear una base de datos y conectarla a esta aplicación. ¿Dónde empezar? Probablemente de la propia base de datos. Decidí usar PostgreSQL porque me gustó su interfaz de administración fácil de usar. Primero, necesitamos descargar el instalador de PostgreSQL, por ejemplo desde aquí: Descarga de la base de datos PostgreSQL. No describiré el proceso de instalación completo, porque puede diferir según su sistema operativo. Sin embargo, observo que en el proceso deberá crear una contraseña de administrador para la función (cuenta) predeterminada de Postgres e ingresarla 2 veces. Para simplificar, configuré la contraseña en 123 . Por supuesto, en proyectos reales es necesario idear algo más complicado. Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 2A continuación, el programa de instalación le solicita que seleccione un puerto; lo dejé en su valor predeterminado. Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 3La configuración regional también se dejó como predeterminada. Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 4Instalado, luego abra la interfaz de administrador pgAdmin . Se abrirá un navegador con una ventana emergente donde se nos pedirá que introduzcamos la contraseña creada previamente. Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 5Ahora necesitamos configurar el idioma de la interfaz. Para hacer esto, haga clic en Configurar pgAdmin --> Varios --> Idioma del usuario , seleccione el idioma deseado --> Guardar y vuelva a cargar la página del navegador . Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 6En la esquina superior izquierda de la página, haga clic en Servidor , aparece la ventana " Conectar al servidor " . Ingresamos nuevamente nuestra contraseña y marcamos la casilla Guardar Contraseña para no ingresarla cada vez. Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 7Podríamos seguir usando el rol de administrador para todas las bases de datos, pero sería mejor crear un rol nuevo, porque podemos tener muchas bases de datos y muchos programas que las usan. Para hacer esto, en la esquina superior izquierda, haga clic en PostgreSQL 12 --> RMB en Inicio de sesión/Roles de grupo --> Crear --> Inicio de sesión/Rol de grupo Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 8 En la ventana emergente, en la pestaña “ General ”, ingrese el nombre del rol. Llamé al rol root . Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 9En la pestaña “ Definición ” creamos una nueva contraseña, dejé 123 solo para no confundirnos. Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 10Vaya a la pestaña “ Derechos ” y marque todos los elementos necesarios. He configurado todos los elementos en " ". Pulsamos en “ GuardarAgregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 11Procedemos a crear una base de datos. Haga clic derecho en “Bases de datos” --> Crear --> Base de datos Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 12 En la pestaña “ General ”, cree el nombre de la base de datos. Que sean, por ejemplo, los clientes . Le asignamos el propietario a root , a quien creamos en el paso anterior. Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 13Sobre el "Definición » comprobar que tenemos configurada la codificación UTF8 . Clic en Guardar ". Eso es todo, nuestra base de datos ha sido creada (vacía por ahora). Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 14En este punto podríamos terminar con pgAdmin, porque... Crearemos tablas mediante programación, pero, por si acaso, le mostraré cómo crear una tabla manualmente. Expanda los clientes --> Esquemas --> árbol público . Haga clic con el botón derecho en Tablas --> Crear --> Tabla . Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 15Se abrirá una ventana emergente. En la pestaña “ General ”, asignamos un nombre a nuestra tabla, por ejemplo test_table , y asignamos root como propietario . Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 16Vaya a la pestaña “ Columnas ”, haga clic en “ + ” para crear una nueva columna. Ingrese el nombre " id " y el tipo de datos bigserial , que es equivalente al tipo Long en Java, pero con incremento automático (al agregar un nuevo registro, la identificación aumentará automáticamente en uno). Marcamos no NULL como " ", la clave principal también es " ". Creamos las columnas “ nombre ”, “ correo electrónico ” y “ teléfonoAgregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 17 ” de la misma forma . Seleccionamos el tipo de dato variando carácter , este corresponde al tipo String , pero permite establecer la longitud máxima. Establecemos la longitud máxima del nombre en 200 caracteres para completar el nombre completo. en una columna. Establecemos la longitud máxima del correo electrónico en 254 caracteres. Puede encontrar por qué el correo electrónico tiene una longitud máxima tan grande aquí . Para un número de teléfono, seleccione 20 caracteres, esto debería ser suficiente. Un poco sobre los números de teléfono: Conceptos erróneos de los programadores sobre los números de teléfono (Habr) Marcamos no NULL en todas las columnas como " " si queremos que estos datos sean obligatorios. Clic en Guardar ". Eso es todo, la tabla ha sido creada. Para eliminar nuestra tabla de prueba, haga clic derecho sobre ella (en el árbol) y “ eliminar ”, porque Ya no lo necesitamos, porque crearemos tablas desde nuestro programa. Cierre pgAdmin y vaya a nuestro programa. Abramos IDEA con nuestro proyecto. Haga clic en Base de datos en la columna derecha de la interfaz, haga clic en " + " para agregar nuestra base de datos. Siguiente fuente de datos --> PostgreSQL . En la ventana emergente, ingresamos en el campo Usuario el rol root que creamos anteriormente y nuestra contraseña.Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 18Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 19123 en el campo de contraseña . En el campo Base de datos escribimos el nombre de la base de datos de nuestros clientes . Pulsamos el botón Probar conexión , y si vemos una marca de verificación verde debajo, entonces todo está en orden y pulsamos el botón Aceptar . Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 20Eso es todo, nos hemos conectado a la base de datos, ahora vayamos al archivo pom.xml y agreguemos dependencias. Para trabajar con la base de datos ORM :
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Para crear un controlador REST:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Para el 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>
Ahora que hemos ordenado pom.xml, vayamos a la carpeta de recursos y completemos el archivo application.properties de la siguiente manera:
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
Aquí ingresamos la URL de nuestra base de datos, proporcionamos el nombre de usuario y la contraseña, registramos el controlador para PostgreSQL, indicamos que usaríamos el tipo de datos PostgreSQL y especificamos el dialecto para Hibernate. A continuación, creemos un nuevo directorio llamado base de datos en la misma carpeta de recursos . En este directorio crearemos 2 archivos: initDB.sql y populateDB.sql . El primero se encargará de crear las tablas, el segundo se encargará de llenarlas inicialmente. Abramos initDB.sql y veamos una barra verde en la parte superior que dice El dialecto SQL no está configurado . Esto significa que no hemos elegido ningún dialecto SQL para nuestro proyecto (y hay varios). Haga clic en el lado derecho de la misma franja sobre la inscripción Cambiar dialecto a… . En la ventana emergente, hacemos clic en Project SQL Dialect , y como nuestra base de datos es PostgreSQL , seleccionamos el dialecto del mismo nombre. Haga clic en Aceptar. Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot.  Parte 1 - 21 Pasemos a completar nuestros archivos .sql . Primero completemos el archivo 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
);
Si, después de completar el archivo, algunas palabras que no sean clientes están escritas en fuente blanca, haga clic derecho dentro del texto y seleccione Cambiar dialecto --> PostgreSQL nuevamente . Como probablemente ya entendiste, estos son los mismos datos que completamos al crear la tabla de prueba manualmente. Aquí están formateados en el dialecto PostgreSQL del lenguaje SQL. Ahora llenemos el archivo 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)');
Si el nombre de la mesa de tus clientes está escrito en letras rojas, entonces está bien. El punto es que aún no hemos creado esta tabla y IDEA aún no la reconoce. Para crear y completar la tabla, debemos volver al archivo application.properties y agregar allí las siguientes tres líneas:
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
En estas líneas decimos que queremos inicializar la base de datos mediante programación e indicamos qué archivos se deben utilizar para ello. A continuación, vaya al método principal de nuestra aplicación y ejecútelo . Después de eso, vaya a pgAdmin --> Servidores --> PostgreSQL 12 --> Bases de datos --> clientes --> Esquemas --> público , haga clic derecho en " Tablas ", " Actualizar ". Si todo salió bien, veremos la tabla de clientes que creamos . Después de eso, regrese al archivo application.properties y comente la línea.
spring.datasource.data=classpath*:database/populateDB.sql
como a continuación:
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
Si no hacemos esto, la próxima vez que ejecutemos el programa recibiremos el siguiente error: org.postgresql.util.PSQLException: ERROR: Un valor de clave duplicado viola la restricción única "clients_pkey" . Esto sucede porque ya hemos completado los campos con ID 1 y 2 en la tabla (incluso durante el primer lanzamiento). En la tabla que creamos, el campo id se especifica como bigserial , que corresponde al tipo Long en Java. Sin embargo, en nuestro programa el tipo de este campo es Entero . Decidí mostrar cómo usar Long (BIGSERIAL) porque tiene un rango mayor que Integer. El hecho es que en las tablas, un campo designado como clave principal se puede usar no solo para almacenar ID de usuario , sino también para almacenar índices de una amplia variedad de datos, y el número de dichos registros puede exceder el valor entero máximo. Por ejemplo, si nuestro programa toma algunas medidas cada segundo y escribe los datos en una tabla. Para reescribir nuestras clases para usar el tipo de datos Long, necesitamos cambiar el tipo de Integer a Long en todas las clases y métodos que usan el campo id . No haremos esto porque el programa fue escrito originalmente por el autor para el tipo id Integer, lo que significa que esto tiene algún sentido. Para continuar, eliminemos una vez más la tabla de clientes que creamos de nuestra base de datos, pero ahora intentaremos hacerlo mediante programación en lugar de hacerlo manualmente. Para hacer esto, comente nuestro código en el archivo initDB.sql y agregue una línea:
-- 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
Iniciemos el programa, vayamos a pgAdmin , hagamos clic derecho en “ Tablas ” (en nuestra base de datos de clientes ) - ->Actualizar ”, y veremos que nuestra tabla ha desaparecido. ¡NÓTESE BIEN! ¡Tenga cuidado al usar este comando, de lo contrario corre el riesgo de perder todos los datos que tenía en su tabla! Volvamos al archivo initDB.sql y reescribámoslo de la siguiente manera:
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
);
Aquí hemos cambiado el tipo de identificación a SERIAL , que coincide con el tipo de entero que estamos usando para el campo de identificación en nuestro programa. Además, se ha aumentado la longitud máxima del campo del teléfono para que podamos utilizar libremente espacios y caracteres especiales (paréntesis, guiones, etc.) en su redacción. El número máximo de dígitos en un número de teléfono es actualmente de 18 dígitos (si mi memoria no me falla). Configuré el tamaño en 50 caracteres para estar seguro. Vayamos al archivo application.properties y descomentemos la línea:
spring.datasource.data=classpath*:database/populateDB.sql
Ejecutemos nuestro programa, vayamos a pgAdmin, verifiquemos que nuestra tabla haya sido creada y comentemos esta línea.
#spring.datasource.data=classpath*:database/populateDB.sql
Aquí es donde probablemente termine la primera parte del artículo. Espero que os guste, escribid comentarios (aunque no os haya gustado). En la segunda parte, reescribiremos nuestras clases para que puedan trabajar con bases de datos reales. Continuación: Agregar una base de datos PostgreSQL a un servicio RESTful en Spring Boot. Parte 2 UPD ¡Gracias a los moderadores por corregir mis imágenes y formato de texto!
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION