Empezamos con la configuración básica y es que debemos añadir las librerias necesarias para el uso de JPA y H2.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency>
Para este ejemplo añadiremos una pequeña configuración extra, la parte de la configuración a BBDD la realizaremos directamente sobre el fichero 'application.properties'. Sin necesidad de crear un fichero 'persistence.xml'. La parte más importante es la correspondiente a la propiedad 'javax.persistence.sql-load-script-source', que nos permite indicar un fichero SQL que ejecutar al levantar la BBDD.
## DATASOURCE PROPERTIES spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1 spring.datasource.username=sa spring.datasource.password=sa spring.datasource.driver-class-name=org.h2.Driver spring.datasource.platform=org.hibernate.dialect.H2Dialect ## JPA PROPERTIES spring.jpa.show-sql=true #spring.jpa.database=MYSQL spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.properties.hibernate.cache.use_second_level_cache=true spring.jpa.properties.javax.persistence.sharedCache.mode=DISABLE_SELECTIVE spring.jpa.properties.javax.persistence.schema-generation.database.action=drop-and-create spring.jpa.properties.javax.persistence.sql-load-script-source=script/data.sql
Ahora crearemos las clases JPA que serán el reflejo de las entidades de BBDD. Para nuestro ejemplo crearemos una clase 'Book' que contendrá información básica de libros y una clase 'GenericEntity' que nos servirá para aglutinar aquellos atributos que serán iguales en todas las futuras entidades, como son el campo clave y los campos de auditoría. Todo ello gracias a la anotación 'MappedSuperclass'. Sobre como hacer la auditoría ya hicimos un post anteriormente, aquí.
El siguiente paso es crear el DAO o Repository que nos permita acceder a los datos y/o modificarlos. Para ello crearemos una clase 'BookDao' y 'GenericDao'. De esta forma tendremos clases de acceso a datos con un conjunto de métodos por defecto. La anotación '@NoRepositoryBean' indicará a Spring que no cree un proxy de acceso a datos para la interfaz, cosa que si hará con 'BookDao'.
@NoRepositoryBean public interface GenericDao<E extends GenericEntity<K>, K extends Serializable> extends JpaRepository<E, K> { } .... public interface BookDao extends GenericDao<Book, Integer> { }
Por último nos queda crear el controlador
@RestController("/book") public class BookRestController { @Autowired private BookDao repository; @GetMapping public List<Book> findAll() { return repository.findAll(); } @GetMapping("/{id}") public Book findById(@PathVariable("id") final Integer id) { return repository.findOne(id); } }
Si arrancamos la aplicación podremos acceder a los datos por ejemplo con la siguiente consulta: http://localhost:8082/book/3
No hay comentarios:
Publicar un comentario