26
Spring Roo Desarrollo ágil de aplicaciones a partir de dominio de aplicación Cristian Romero Matesanz Ingeniero Informático Colegiado 105 Madrid

Curso Spring Roo Spring Data Jpa Maven

Embed Size (px)

DESCRIPTION

Spring roo, crea estructura de proyectos de manera rapida y sencilla, con estructura Maven y el uso de Spring data Jpa. Elimina la capa Dao para siempre, modela el dominio y generar servicios de manera sencilla con Spring Roo.

Citation preview

Page 1: 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

Page 2: Curso Spring Roo Spring Data Jpa Maven

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

Page 3: Curso Spring Roo Spring Data Jpa Maven

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.

Page 4: Curso Spring Roo Spring Data Jpa Maven

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

Page 5: Curso Spring Roo Spring Data Jpa Maven

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> { }

Page 6: Curso Spring Roo Spring Data Jpa Maven

3. Spring data Jpa

Operaciones que disponemos mediante el acceso a la interfaz:

Page 7: Curso Spring Roo Spring Data Jpa Maven

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:

Page 8: Curso Spring Roo Spring Data Jpa Maven

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:

Page 9: Curso Spring Roo Spring Data Jpa Maven

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.

Page 10: Curso Spring Roo Spring Data Jpa Maven

3. Spring Data Jpa: Operadores permitidos 3/3

Page 11: Curso Spring Roo Spring Data Jpa Maven

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.

Page 12: Curso Spring Roo Spring Data Jpa Maven

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

Page 13: Curso Spring Roo Spring Data Jpa Maven

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.

Page 14: Curso Spring Roo Spring Data Jpa Maven

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

Page 15: Curso Spring Roo Spring Data Jpa Maven

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)

Page 16: Curso Spring Roo Spring Data Jpa Maven

3.Spring Data Jpa: Queries basadas en predicados: Querydsl

Page 17: Curso Spring Roo Spring Data Jpa Maven

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

Page 18: Curso Spring Roo Spring Data Jpa Maven

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

Page 19: Curso Spring Roo Spring Data Jpa Maven

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

Page 20: Curso Spring Roo Spring Data Jpa Maven

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

Page 21: Curso Spring Roo Spring Data Jpa Maven

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.

Page 22: Curso Spring Roo Spring Data Jpa Maven

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

Page 23: Curso Spring Roo Spring Data Jpa Maven

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

Page 24: Curso Spring Roo Spring Data Jpa Maven

4.Add-on Roo

Get: Localhost:8080/entidads/4

Get All: Localhost:8080/entidads

Post(Crear 1 entidad): Localhost:8080/entidads

Page 25: Curso Spring Roo Spring Data Jpa Maven

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

Page 26: Curso Spring Roo Spring Data Jpa Maven

4.Ejemplo practico