Este documento describe Spring Roo, una herramienta de desarrollo ágil para crear aplicaciones Spring. Spring Roo permite generar rápidamente una aplicación base incluyendo frameworks populares como Spring MVC, GWT y JSF. También cubre temas como el acceso a datos mediante repositorios JPA, consultas personalizadas, relaciones entre entidades y la creación de un proyecto Roo.
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Spring Roo desarrollo ágil
1. Cristian Romero Matesanz
Ingeniero Informático Colegiado 105 Madrid
Spring Roo
Desarrollo ágil de aplicaciones a partir de dominio de aplicación
2. 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
3. 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.
4. 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
5. 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> { }
6. 3. Spring data Jpa
Operaciones que disponemos mediante el acceso a la
interfaz:
7. 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:
8. 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:
9. 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.
11. 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.
12. 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
13. 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.
14. 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
15. 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)
17. 4.Spring Data Jpa: Creación de un
proyecto Roo
1.
Creación del nombre de proyecto
2.
Definición de la base de datos de nuestro proyecto
3.
Tipos relaciones: one to one, one to many, many to one , many to many
Creación de interfaz para la capa de servicios
7.
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
Definición de la base de las relaciones entre entidades
6.
entity jpa --class ~.model.Entidad --testAutomatically -–activeRecord false
repository jpa --interface ~.repository.EntidadRepository
Creación de atributos de la entidad
5.
jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
Definición de cada una de las entidades y repositorios de nuestro dominio
4.
project --topLevelPackage es.prueba –projectName curso --java 6 --packaging JAR
service --interface ~.service.ClienteService --entity ~.domain.Cliente
Cerrar consola roo
Eliminar roo del proyecto: http://static.springsource.org/spring-roo/reference/html/removing.html
18. 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
19. 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
20. 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
Primary
Inverse side
21. 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.
22. 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
23. 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