1. Información general
Spring Boot hace que sea realmente fácil trabajar con diferentes sistemas de bases de datos, sin la molestia de la administración manual de dependencias.
Más específicamente, Spring Data JPA starter proporciona toda la funcionalidad necesaria para una integración perfecta con varias implementaciones de DataSource .
En este tutorial, aprenderemos cómo integrar Spring Boot con HSQLDB .
2. Las dependencias de Maven
Para demostrar lo fácil que es integrar Spring Boot con HSQLDB, crearemos una capa de repositorio JPA simple que realiza operaciones CRUD en entidades de clientes utilizando una base de datos HSQLDB en memoria .
Aquí está el iniciador Spring Boot que usaremos para poner en funcionamiento nuestra capa de repositorio de muestra:
org.springframework.boot spring-boot-starter-data-jpa 2.2.2.RELEASE org.hsqldb hsqldb 2.4.0 runtime
Tenga en cuenta que también hemos incluido la dependencia HSQLDB. Sin él, Spring Boot intentará configurar automáticamente un bean DataSource y un grupo de conexiones JDBC para nosotros a través de HikariCP.
Como consecuencia, si no especificamos una dependencia de DataSource válida en nuestro archivo pom.xml , obtendremos un error de compilación .
Además, asegurémonos de verificar la última versión de spring-boot-starter-data-jpa en Maven Central.
3. Conexión a una base de datos HSQLDB
Para ejercitar nuestra capa de repositorio de demostración, usaremos una base de datos en memoria. Sin embargo, también es posible trabajar con bases de datos basadas en archivos. Exploraremos cada uno de estos métodos en las secciones siguientes.
3.1. Ejecución de un servidor HSQLDB externo
Echemos un vistazo a cómo ejecutar un servidor HSQLDB externo y crear una base de datos basada en archivos. En general, instalar HSQLDB y ejecutar el servidor es sencillo.
Estos son los pasos que debemos seguir:
- Primero, descargaremos HSQLDB y lo descomprimiremos en una carpeta.
- Dado que HSQLDB no proporciona una base de datos predeterminada lista para usar , crearemos una llamada "testdb" por ejemplo
- Lanzaremos un símbolo del sistema y navegaremos hasta la carpeta de datos HSQLDB
- Dentro de la carpeta de datos , ejecutaremos el siguiente comando:
java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file.testdb --dbname0.testdb
- El comando anterior iniciará el servidor HSQLDB y creará nuestra base de datos cuyos archivos de origen se almacenarán en la carpeta de datos
- Podemos asegurarnos de que la base de datos se haya creado realmente yendo a la carpeta de datos , que debe contener un conjunto de archivos llamados "testdb.lck" , "testdb.log" , "testdb.properties" y "testdb.script" ( la cantidad de archivos varía según el tipo de base de datos que estamos creando)
Una vez que se ha configurado la base de datos, necesitamos crear una conexión a ella.
Para hacer esto en Windows , vayamos a la carpeta bin de la base de datos y ejecutemos el archivo runManagerSwing.bat . Esto abrirá la pantalla inicial de HSQLDB Database Manager, donde podemos ingresar las credenciales de conexión:
- Tipo: Motor de base de datos HSQL
- URL: jdbc: hsqldb: hsql: // localhost / testdb
- Usuario: "SA" (Administrador del sistema)
- Contraseña: deje el campo vacío
En Linux / Unix / Mac , podemos usar NetBeans, Eclipse o IntelliJ IDEA para crear la conexión de la base de datos a través de las herramientas visuales del IDE, usando las mismas credenciales.
En cualquiera de estas herramientas, es sencillo crear una tabla de base de datos ejecutando un script SQL en el Administrador de base de datos o dentro del IDE.
Una vez conectados, podemos crear una tabla de clientes :
CREATE TABLE customers ( id INT NOT NULL, name VARCHAR (45), email VARCHAR (45), PRIMARY KEY (ID) );
En solo unos sencillos pasos, hemos creado una base de datos HSQLDB basada en archivos que contiene una tabla de clientes .
3.2. El archivo application.properties
Si deseamos conectarnos a la base de datos anterior basada en archivos de Spring Boot, aquí están las configuraciones que debemos incluir en el archivo application.properties :
spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver spring.datasource.url=jdbc:hsqldb:hsql://localhost/testdb spring.datasource.username=sa spring.datasource.password= spring.jpa.hibernate.ddl-auto=update
Alternativamente, si usamos una base de datos en memoria, deberíamos usar estos:
spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver spring.datasource.url=jdbc:hsqldb:mem:testdb;DB_CLOSE_DELAY=-1 spring.datasource.username=sa spring.datasource.password= spring.jpa.hibernate.ddl-auto=create
Tenga en cuenta el parámetro DB_CLOSE_DELAY = -1 adjunto al final de la URL de la base de datos. Cuando trabajamos con una base de datos en memoria, necesitamos especificar esto, para que la implementación de JPA, que es Hibernate, no cierre la base de datos mientras la aplicación se está ejecutando .
4. La entidad cliente
Con la configuración de conexión de la base de datos ya configurada, a continuación, debemos definir nuestra entidad Cliente :
@Entity @Table(name = "customers") public class Customer { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String name; private String email; // standard constructors / setters / getters / toString }
5. El depósito de clientes
Además, necesitamos implementar una capa de persistencia delgada, que nos permite tener una funcionalidad CRUD básica en nuestras entidades JPA de clientes .
Podemos implementar fácilmente esta capa simplemente extendiendo la interfaz CrudRepository :
@Repository public interface CustomerRepository extends CrudRepository {}
6. Prueba del repositorio de clientes
Finalmente, debemos asegurarnos de que Spring Boot realmente pueda conectarse a HSQLDB. Podemos lograr esto fácilmente simplemente probando la capa del repositorio.
Comencemos a probar los métodos findById () y findAll () del repositorio :
@RunWith(SpringRunner.class) @SpringBootTest public class CustomerRepositoryTest { @Autowired private CustomerRepository customerRepository; @Test public void whenFindingCustomerById_thenCorrect() { customerRepository.save(new Customer("John", "[email protected]")); assertThat(customerRepository.findById(1L)).isInstanceOf(Optional.class); } @Test public void whenFindingAllCustomers_thenCorrect() { customerRepository.save(new Customer("John", "[email protected]")); customerRepository.save(new Customer("Julie", "[email protected]")); assertThat(customerRepository.findAll()).isInstanceOf(List.class); } }
Finalmente, probemos el método save () :
@Test public void whenSavingCustomer_thenCorrect() { customerRepository.save(new Customer("Bob", "[email protected]")); Customer customer = customerRepository.findById(1L).orElseGet(() -> new Customer("john", "[email protected]")); assertThat(customer.getName()).isEqualTo("Bob"); }
7. Conclusión
In this article, we learned how to integrate Spring Boot with HSQLDB, and how to use either a file-based or in-memory database in the development of a basic JPA repository layer.
As usual, all the code samples shown in this article are available over on GitHub.