A continuación usaremos otra implementación del Repository, pero esta vez utilizará Spring Data JPA para acceder a una base de datos real. ¡Manos a la obra!
Crearemos una interfaz llamada ProvinciaRepository y la haremos extender de JpaRepository.
Comenzaremos entonces realizando el mapeo de nuestro objeto de dominio Provincia a la tabla. Para esto anotaremos a Provincia con las anotaciones correspondientes. Buscá en la documentación de JPA como realizarlo (también podés mirar la implementación de la clase Pais).
Usaremos entonces nuestra nueva interfaz en el service. Lo que tendremos que hacer en este service es usar el repository y decirle a JPA que localice al objeto Provincia cuyo id sea el indicado por parámetro. Sugerencia: buscar en la documentación de Spring Data JPA cómo hacer una búsqueda por id.
El proyecto ya tiene pre-configurada una Base de datos que funciona en memoria llamada Hsqldb, que se levanta al correr la aplicación o los test y se elimina al terminar dicha ejecución. Muy cómodo para testear!
A probar los tests! Si todo sale bien, los tests deberían pasar sin problemas. De hecho, todos los tests deberían seguir funcionando.
Logramos realizar entonces el primer acceso a una base de datos a través de Spring Data JPA. Fijate que en el código nunca se escribió SQL, ni se manejó una conexión. Siempre se trabajó contra objetos, sin preocuparse por la existencia de tablas o columnas.
Por último, es interesante destacar que este cambio de implementación no afectó al Service: al haber logrado una separación real entre las capas, fue posible cambiar completamente una implementación sin afectar a los consumidores de la interfaz.
Para pensar: ¿Quién hizo la implementación de mi repository?