Curso Spring Roo Spring Data Jpa Maven
-
Upload
cristian-romero-matesanz -
Category
Technology
-
view
785 -
download
8
description
Transcript of Curso Spring Roo Spring Data Jpa Maven
Spring RooDesarrollo ágil de aplicaciones a partir de dominio de
aplicación
Cristian Romero Matesanz Ingeniero Informático Colegiado 105 Madrid
1. Que es Spring ROO?
Herramienta de desarrollo ágil basado en Spring a partir de dominio de la aplicación.
Permite crear una aplicación base de manera rápida incluyendo frameworks mas populares: Creación de aplicaciones web basadas en Spring
MVC, GWT, JSF2. Aplicaciones basadas en tecnología Maven Creación de servicios Rest. Permite incluir Spring web Flow, Spring
Security, Spring Integration etc mediante add-on desarrollados por Spring Roo.
Posibilidad de crear tus propios add-on
2. Acceso a datos mediante Repositorios 1/2
Soporte a base de datos sql y nosql: Mongo DB (Nosql) HSQL (in memory), HSQL (persistent), H2 (in
memory) ,MySQL,Postgres,MS SQL Server,Sybase,Oracle *,DB2 *,DB2/400,Google App Engine (GAE),Apache Derby (Java DB),Firebird
JPA es un una especificación de acceso a datos. Para poder usarlo elegir implementación soportada por Spring Roo EclipseLink Hibernate OpenJPA DataNucleus 3.
2. Acceso a datos mediante Repositorios 2/2
* Dependencia JDBC driver para estas bases de datos no se encuentran en un repositorio de acceso publico de Maven repositories. Roo crea en tu pom.xml una version especifica y deberás modificarla con la instalada en tu repositorio.
Instalar en maven mvn install:install-file -Dfile=ojdbc14_g.jar -
DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.2 -Dpackaging=jar -DgeneratePom=true
3. Spring data Jpa
Acceso a datos mediante @Repository
@Repository es una interfaz que provee todas las operaciones necesarias para la gestión y acceso a datos.
Roo se encarga de inyectar la implementación que definamos a la hora de crear nuestro proyecto.
Ejemplo: public interface AgendaRepository extends
JpaRepository<Agenda, Long>, JpaSpecificationExecutor<Agenda> { }
3. Spring data Jpa
Operaciones que disponemos mediante el acceso a la interfaz:
3. Spring Data Jpa: paginación de resultados y ordenación
Permite la paginación y el ordenado de los resultados en cualquiera de la entidades definidas en el modelo:
3. Spring Data Jpa: Realizando consultas sobre datos 1/3 Creación de nuestras propias consultas sobre
datos mediante la simple definición de métodos en nuestra interfaz uniendo condiciones mediante and y or:
3. Spring Data Jpa: Realizando consultas sobre datos 2/3
Nos permite navegar entre atributos de la entidad a buscar, y también saltar entre entidades: Si suponemos que Persons tiene Addresses con ZipCodes se puede
generar la siguiente expresión: List<Person> findByAddressZipCode(ZipCode zipCode);
Se podrá paginar y ordenar tambien este tipo de consultas: Page<User> findByLastname(String lastname, Pageable pageable); List<User> findByLastname(String lastname, Sort sort); List<User> findByLastname(String lastname, Pageable pageable);
Ventajas: Muy comodas a la hora de realizar consultas ya que no requiere implementación
Desventajas: No se puede anidar las distintas consultas para generar un único
acceso a la BBDDUso de predicados con Specifications o Querydsl. Las consultas no están tipadas, sin cambio un nombre de un atributo
solo sabré cuando despliegue los errores.
3. Spring Data Jpa: Operadores permitidos 3/3
3. Spring Data Jpa: Usando “named queries”
Spring data permite crear consultas a partir de una query definida de manera sencilla:
Ventajas: Facilidad de programación y uso.
Desventajas: de nuevo las consultas no son tipadas, solo conozco los errores en tiempo de ejecución.
3. Spring Data Jpa: Queries basadas en predicados: Specification versus Querydsl
Spring data Jpa permite búsquedas basadas en predicados. Por defecto usa Specifications de Jpa, pero permite soporte a Querydsl.
Un predicado es una condición de que delimita que delimita un subconjunto de datos que cumplen dicho predicado: Ejemplo: Es gran cliente, cliente que vende mas de una
determinada cantidad
3. Spring Data Jpa: Queries basadas en predicados: Specification versus Querydsl
As you can see, Specifications offers some glue-code methods to chain and combine Specifications. Thus extending your data access layer is just a matter of creating new Specification implementations and combining them with ones already existing.
Ventajas de uso de Specifications: Las que provee las consultas de acceso por predicados
Facilidad de añadir y quitar predicados a nuestra consulta Permite flexibilidad de nuestras consultas a variabilidad de
necesidades de nuestros clientes de manera sencilla
Desventajas de uso de Specifications: Código sucio y poco compresible para crear los predicados Necesidad de creación de clases metada _nombreClase
para mapear los atributos. No es compatible con mongoDB.
3.Spring Data Jpa: Queries basadas en predicados: Querydsl
Permite la ayuda de tu IDE para acceso a las propiedades y métodos de manera sencilla
No existe posibilidad de crear queries invalidas sintácticamente (type-safe on all levels)
Tipos de dominios y atributos puedes ser accedidos de manera segura (Sin usos de String para referenciarlos)
Mayor Flexibilidad a cambios en el dominio
Al permitir búsqueda por predicados permite la creación de grandes queries con poco esfuerzo
3.Spring Data Jpa: Queries basadas en predicados: Querydsl
Permite la ayuda de tu IDE para acceso a las propiedades y metodos de manera sencilla
No existe posiblidad de crear queries invalidas sintacticamente (type-safe on all levels)
3.Spring Data Jpa: Queries basadas en predicados: Querydsl
4.Spring Data Jpa: Creación de un proyecto Roo1. Creación del nombre de proyecto
project --topLevelPackage es.prueba –projectName curso --java 6 --packaging JAR
2. Definición de la base de datos de nuestro proyecto jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
3. Definición de cada una de las entidades y repositorios de nuestro dominio entity jpa --class ~.model.Entidad --testAutomatically -–activeRecord false repository jpa --interface ~.repository.EntidadRepository
4. Creación de atributos de la entidad field string --fieldName descripcion --sizeMin 1 --sizeMax 300 --notNull--unique
true field date --fieldName fechacreacion --type java.util.Date field number --fieldName importe --type java.lang.Float
5. Definición de la base de las relaciones entre entidades Tipos relaciones: one to one, one to many, many to one , many to many
6. Creación de interfaz para la capa de servicios service --interface ~.service.ClienteService --entity ~.domain.Cliente
7. Eliminar roo del proyecto: http://static.springsource.org/spring-roo/reference/html/removing.html
Cerrar consola roo
4.Spring Data Jpa: Relaciones “one to many Bidireccional”
Se crea cuando un objeto puede estar relacionado con n objetos referentes a una entidad. field set --class ~.model.TrainingProgram --fieldName
courses --type ~.model.Course –cardinality ONE_TO_MANY --mappedBy trainingProgram
field reference --class ~.model.Course --fieldName trainingProgram --type ~.model.TrainingProgram --cardinality MANY_TO_ONE
Primary
4.Spring Data Jpa: Relaciones many to many Bidireccional
Se crea cuando un objeto puede estar relacionado con n objetos referentes a una entidad y viceversa
Existen dos opciones diferentes Creación de clase intermedia en el caso de
querer almacenar atributos de la relación y relaciones “one to many” como las definidas en el punto anterior
Si no queremos almacenar atributos crearemos dos sets en cada una de las entidades de dominio y una de ellas será la entidad fuerte encargada de grabar todos los cambios existentes
4.Spring Data Jpa: Relaciones many to many Bidireccional
Se crea cuando un objeto puede estar relacionado con n objetos referentes a una entidad. field set --class ~.model.Tag --fieldName courses--type
~.model.Course--cardinality MANY_TO_MANY field set --class ~.model.Course --fieldName tags --type
~.model.Tag --cardinality MANY_TO_MANY --mappedBy courses
Inverse side
Primary
4.Spring Data Jpa: Relaciones “one to one”
Se crea cuando un objeto puede con un único objeto de otra entidad field reference --class ~.model.Factura --fieldName
tipoPago --type ~.model.TipoPago –cardinality ONE_TO_ONE
No pueden ser bidireccionales, roo aun no permite relaciones bidirecionales con un mapped by WORKARROUND: Si necesitas una relación bidireccional
mapearlas como one to many, teniendo en cuenta que solo podrás meter en el set un único valor.
4.Bidireccional o unidireccional??
Principal ventaja de tener la relación bidireccional es poder recorrerla en ambas direcciones
Desventaja: al gestionar los objetos debes mantener los dos lados de la relación.
Siempre que no sea necesario recorrer de manera bidireccional evitar su uso
field set -class ~.model.Persona --fieldName courses--type ~.model.Course--cardinality MANY_TO_MANY
4.Add-on Roo
Spring mvc: web mvc setup web mvc all --package ~.web
Creación servicios Rest: json all web mvc json setup web mvc json all Crea controladores para las operaciones get,
post,delete,put estandar para servicios rest
4.Add-on Roo
Get: Localhost:8080/entidads/4
Get All: Localhost:8080/entidads
Post(Crear 1 entidad): Localhost:8080/entidads
4.Add-on Roo
√
Post(Crear n entidades): Localhost:8080/entidads
Update(1 entidad): Localhost:8080/entidads
Update(n entidades): Localhost:8080/entidads
Delete(1 entidad): Localhost:8080/entidads/8
4.Ejemplo practico