SlideShare una empresa de Scribd logo
1 de 29
Web catálogo de cursos

Spring, AngularJS y Mybatis
Sumario


Angular JS





Mybatis






Ventajas
Características
Ventajas
Características
Mybatis-Spring

Aplicación





Requisitos funcionales
Arquitectura
Tecnologías, frameworks y herramientas
Problemas surgidos
Sumario


Angular JS





Mybatis






Ventajas
Características
Ventajas
Características
Mybatis-Spring

Aplicación





Requisitos funcionales
Arquitectura
Tecnologías, frameworks y herramientas
Problemas surgidos
Presentación





Superheroic Javascript MVW Framework
Vistas dinámicas en aplicaciones web
Extiende HTML
Angular JS


Ventajas:




Actualización de vista y control de forma
automática (Data binding)
Capa de control autogestionada (controllers)
¡No más manipulación del DOM!

o Separación de lógica de vista y negocio
o Totalmente extensible y compatible con resto de
librerías (jQuery, Dojo, Three.js…)
o Deep linking
o Validación de formularios
o Comunicación con servidor vía XHR.
o Gestión de excepciones
o Internacionalización
Angular JS - Características


Bindings: {{soyUnBinding}}
 Actualización

automática:

Compila

HTML

Vista

Modelo

<div ng-controller="TodoCtrl">
<div ng-controller="TodoCtrl">
<span>{{remaining()}} of {{todos.length}} remaining</span>
<span>{{remaining()}} of {{todos.length}} remaining</span>
<a href="" ng-click="archive()">archive</a>
<a href="" ng-click="archive()">archive</a>
<ul class="unstyled">
<ul class="unstyled">
…
…
Angular JS - Características


Scopes:

HTML

<html lang="en" ng-app>
<html lang="en" ng-app>

JS
var phonecatApp =
var phonecatApp =
angular.module('phonecatApp', []);
angular.module('phonecatApp', []);
…
…
$scope.phones =
$scope.phones =



ID:

phonecatControllers.controller('PhoneListCtrl', ['$scope', '$http',
phonecatControllers.controller('PhoneListCtrl', ['$scope', '$http',
function ($scope, $http) {
function ($scope, $http) {
Angular JS - Características
-Integración XHR:
3.
2. Llamadas AJAX clásicas (desde librería AJAX o
1. Módulo $http
$resource
jQuery):
cursosServices.factory('Nivel', ['$resource',
$http({method: 'GET', url: '/someUrl'}).
cursosServices.factory('Nivel', ['$resource',
$http({method: 'GET', url: '/someUrl'}).
$.ajax({ url: "server", success: function(data){ {
$.ajax({ url: "server", success: function(data){
success(function(data, status, headers, config) {
success(function(data, status, headers, config)
//Update your dashboard gauge
//Update your dashboard gauge
function($resource){
//…
function($resource){
//…
salesGauge.setValue(data.value);
salesGauge.setValue(data.value);
}).
}).
}, return $resource('/cursos-web/getNiveles', {}, { });
}, dataType: "json", complete: poll, timeout: 30000
dataType: "json", complete: poll, config)
error(function(data, status, headers, timeout:{ {}, { });
error(function(data, status, headers, config) { 30000
return $resource('/cursos-web/getNiveles',
})(); //…
})(); //…
query: {method:'GET', params:{}, isArray:true}
query: {method:'GET', params:{}, isArray:true}
});//más métodos...
});//más métodos...
});
});
}]);
}]);
Angular JS - Características


Más ventajas:
 Filters
 Services
 Módulos

$route, $location, $services,

etc.
 Animaciones

Y mucho más…
Sumario


Angular JS





Mybatis






Ventajas
Características
Ventajas
Características
Mybatis-Spring

Aplicación





Requisitos funcionales
Arquitectura
Tecnologías, frameworks y herramientas
Problemas surgidos
Presentación





Framework de persistencia
Soporta SQL
Alternativa/complemento a JDBC
Mybatis


Ventajas:









Eliminación de código JDBC (ahorro 95%)
Mapping de objetos con registros de BD
Configurable por XML o anotaciones
Altamente personalizable
Soporta múltiples ‘DB vendors’ -> ¡Incluso a
nivel de query!
Integración con frameworks: mybatis-spring,
mybatis-velocity, etc.

Inconvenientes:


Fuerza al uso de SQL. No soporta bases de
datos no-SQL
Mybatis – Mapped Statements


Statements mapeados:
 Por

XML:
<select/> <insert/>
<update/> <delete/>

 Por

código:

public interface Mapper {
@Lang(MyLanguageDriver.class)
@Select("SELECT * FROM BLOG")
List<Blog> selectBlog();
}
Mybatis – Mapped statements


Ejemplo de sentencia SELECT

<select id="selectPerson"
<select id="selectPerson"
parameterType="int"
parameterType="int"
resultType="hashmap"
resultMap="personResultMap"
resultType="hashmap"
resultMap="personResultMap"
flushCache="false"
useCache="true" timeout="10000"
flushCache="false"
useCache="true" timeout="10000"
fetchSize="256" statementType="PREPARED"
fetchSize="256" statementType="PREPARED"
resultSetType="FORWARD_ONLY">
resultSetType="FORWARD_ONLY">
SELECT titulo,
SELECT titulo,
activo,
activo,
profesor
profesor
FROM TB_CURSOS
FROM TB_CURSOS
WHERE ID = #{id} ; ;
WHERE ID = #{id}
</select>
</select>
Mybatis – Mapped statements
JDBC
String selectPerson = "SELECT * FROM PERSON WHERE
String selectPerson = "SELECT * FROM PERSON WHERE
ID=?";
ID=?";
PreparedStatement ps =
PreparedStatement ps =
conn.prepareStatement(selectPerson);
conn.prepareStatement(selectPerson);
ps.setInt(1,id);
ps.setInt(1,id);

MYBATIS
<select id=“selectPerson” resultType=“Person”>
<select id=“selectPerson” resultType=“Person”>
SELECT * FROM PERSON
SELECT * FROM PERSON
WHERE ID = #{id}
WHERE ID = #{id}
</select>
</select>
Mybatis – Mapped statements


Resto de sentencias

<delete
<update
<insert
<delete
<update
<insert
id="insertAuthor"
id="insertAuthor"
parameterType="domain.blog.Author"
parameterType="domain.blog.Author"
flushCache="true"
flushCache="true"
statementType="PREPARED"
statementType="PREPARED“
statementType="PREPARED"
statementType="PREPARED“
timeout="20“
keyProperty=""
timeout="20“
keyProperty=""
keyColumn=""
keyColumn=""
>
useGeneratedKeys="" timeout="20“
>
useGeneratedKeys="" timeout="20“
>
>
Mybatis – Result maps


Result maps:

Mapeo de datos en JavaBeans:
<select
<select
id="selectUsers"
id="selectUsers"
parameterType="int"
parameterType="int"
resultType="User“
resultType="User“
>
>
select user_id as "id",
select user_id as "id",
user_name as "userName",
user_name as "userName",
hashed_password as "hashedPassword"
hashed_password as "hashedPassword"
from some_table
from some_table
where id = #{id}
where id = #{id}
</select>
</select>
Mybatis – Result maps


Result maps:

Mapeo de datos en maps externos:
<resultMap
<resultMap
id="userResultMap"
id="userResultMap"
type="User">
type="User">
<id
<id
property="id"
property="id"
column="user_id" />
column="user_id" />
<result
<result
property="username"
property="username"
column="username"/>
column="username"/>
<result
<result
property="password"
property="password"
column="password"/>
column="password"/>
</resultMap>
</resultMap>
Mybatis – Más ventajas


Sql dinámico:

<select
<select
id="findActiveBlogWithTitleLike"
id="findActiveBlogWithTitleLike"
parameterType="Blog" resultType="Blog">
parameterType="Blog" resultType="Blog">
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
<if test="title != null">
<if test="title != null">
AND title like #{title}
AND title like #{title}
</if>
</if>
</select>
</select>




Choose / when / otherwise
Trim / where / set
Foreach
Mybatis – Más ventajas



Constructor
Joins:








Association -> 1:1
Composite -> 1:N y N:N

Discriminators
Cachés
Include en queries
Múltiples Resultsets:

<select id="selectBlog" resultSets="blogs,authors" resultMap="blogResult">
<select id="selectBlog" resultSets="blogs,authors" resultMap="blogResult">
{call getBlogsAndAuthors(#{id,jdbcType=INTEGER,mode=IN})}
{call getBlogsAndAuthors(#{id,jdbcType=INTEGER,mode=IN})}
</select>
</select>
Mybatis-spring







Módulo de integración de Mybatis con
Spring (>3.0)
Fácilmente configurable en el contexto de
Spring (XML o @Configuration)
Abstrae creación / borrado de sesiones
Combina la potencia de Spring (ID,
transaccionalidad (Spring-tx / JTA)) y de
Java 5+ (anotaciones)
Sumario


Angular JS





Mybatis






Ventajas
Características
Ventajas
Características
Mybatis-Spring

Aplicación





Requisitos funcionales
Arquitectura
Tecnologías, frameworks y herramientas
Problemas surgidos
Web cursos


Requisitos funcionales:





Acceso al catálogo de cursos
Alta de cursos

Requisitos no funcionales:







Maven
Arquitectura JEE
Mybatis
AngularJS
Spring MVC
JSON
Web cursos


Arquitectura planteada:
Web cursos


Tecnologías / frameworks / herramientas:











Spring (MVC, TX, TEST)
Mybatis
Angular JS
Maven
Git
STS 3.4.0 basado en Eclipse Kepler
JDK 1.7
Apache Tomcat 7
Web cursos

DEMO
Web cursos


¡Problemas!:



Configuración Mybatis-spring
File upload Angular JS

“Efecto siesta”
Web cursos

https://github.com/johnnyRey/cursos-web.git
https://github.com/johnnyRey/cursos-web.git

http://www.slideshare.net/JuanDiegoReyesPonce/cursos-web
http://www.slideshare.net/JuanDiegoReyesPonce/cursos-web
Web cursos

GRACIAS

Más contenido relacionado

Similar a Cursos web

Estándares Web con Chico UI
Estándares Web con Chico UIEstándares Web con Chico UI
Estándares Web con Chico UIGuillermo Paz
 
Lecciones aprendidas creando una red social
Lecciones aprendidas creando una red socialLecciones aprendidas creando una red social
Lecciones aprendidas creando una red socialRoberto Luis Bisbé
 
MyBatis como alternativa a Hibernate
MyBatis como alternativa a HibernateMyBatis como alternativa a Hibernate
MyBatis como alternativa a HibernateRubén Aguilera
 
Curso Básico de AngularJS
Curso Básico de AngularJSCurso Básico de AngularJS
Curso Básico de AngularJSCarlos Azaustre
 
[ES] Conectividad de java a base de datos(jdbc)
[ES] Conectividad de java a base  de datos(jdbc)[ES] Conectividad de java a base  de datos(jdbc)
[ES] Conectividad de java a base de datos(jdbc)Eudris Cabrera
 
ASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVCASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVCDanae Aguilar Guzmán
 
Introducción a AngularJS
Introducción a AngularJS Introducción a AngularJS
Introducción a AngularJS Marcos Reynoso
 
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos AiresPresentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Airespeterpunk
 
Hands-on Spring 3: The next generation
Hands-on Spring 3: The next generationHands-on Spring 3: The next generation
Hands-on Spring 3: The next generationSergi Almar i Graupera
 
Introducción a Django
Introducción a DjangoIntroducción a Django
Introducción a DjangoJoaquim Rocha
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)lenny
 

Similar a Cursos web (20)

Estándares Web con Chico UI
Estándares Web con Chico UIEstándares Web con Chico UI
Estándares Web con Chico UI
 
Lecciones aprendidas creando una red social
Lecciones aprendidas creando una red socialLecciones aprendidas creando una red social
Lecciones aprendidas creando una red social
 
Clase
ClaseClase
Clase
 
01 introducción
01 introducción01 introducción
01 introducción
 
MyBatis como alternativa a Hibernate
MyBatis como alternativa a HibernateMyBatis como alternativa a Hibernate
MyBatis como alternativa a Hibernate
 
Curso Básico de AngularJS
Curso Básico de AngularJSCurso Básico de AngularJS
Curso Básico de AngularJS
 
Angular js
Angular jsAngular js
Angular js
 
06. jsf (java server faces) (1)
06. jsf (java server faces) (1)06. jsf (java server faces) (1)
06. jsf (java server faces) (1)
 
[ES] Conectividad de java a base de datos(jdbc)
[ES] Conectividad de java a base  de datos(jdbc)[ES] Conectividad de java a base  de datos(jdbc)
[ES] Conectividad de java a base de datos(jdbc)
 
ASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVCASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVC
 
jQuery y ASP
jQuery y ASPjQuery y ASP
jQuery y ASP
 
Introducción a AngularJS
Introducción a AngularJS Introducción a AngularJS
Introducción a AngularJS
 
Asp.net mvc
Asp.net mvcAsp.net mvc
Asp.net mvc
 
10.desarrollowebconjava
10.desarrollowebconjava10.desarrollowebconjava
10.desarrollowebconjava
 
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos AiresPresentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
 
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
 
Hands-on Spring 3: The next generation
Hands-on Spring 3: The next generationHands-on Spring 3: The next generation
Hands-on Spring 3: The next generation
 
6.angular js
6.angular js6.angular js
6.angular js
 
Introducción a Django
Introducción a DjangoIntroducción a Django
Introducción a Django
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 

Último

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 

Último (16)

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 

Cursos web

  • 1. Web catálogo de cursos Spring, AngularJS y Mybatis
  • 4. Presentación    Superheroic Javascript MVW Framework Vistas dinámicas en aplicaciones web Extiende HTML
  • 5. Angular JS  Ventajas:    Actualización de vista y control de forma automática (Data binding) Capa de control autogestionada (controllers) ¡No más manipulación del DOM! o Separación de lógica de vista y negocio o Totalmente extensible y compatible con resto de librerías (jQuery, Dojo, Three.js…) o Deep linking o Validación de formularios o Comunicación con servidor vía XHR. o Gestión de excepciones o Internacionalización
  • 6. Angular JS - Características  Bindings: {{soyUnBinding}}  Actualización automática: Compila HTML Vista Modelo <div ng-controller="TodoCtrl"> <div ng-controller="TodoCtrl"> <span>{{remaining()}} of {{todos.length}} remaining</span> <span>{{remaining()}} of {{todos.length}} remaining</span> <a href="" ng-click="archive()">archive</a> <a href="" ng-click="archive()">archive</a> <ul class="unstyled"> <ul class="unstyled"> … …
  • 7. Angular JS - Características  Scopes: HTML <html lang="en" ng-app> <html lang="en" ng-app> JS var phonecatApp = var phonecatApp = angular.module('phonecatApp', []); angular.module('phonecatApp', []); … … $scope.phones = $scope.phones =  ID: phonecatControllers.controller('PhoneListCtrl', ['$scope', '$http', phonecatControllers.controller('PhoneListCtrl', ['$scope', '$http', function ($scope, $http) { function ($scope, $http) {
  • 8. Angular JS - Características -Integración XHR: 3. 2. Llamadas AJAX clásicas (desde librería AJAX o 1. Módulo $http $resource jQuery): cursosServices.factory('Nivel', ['$resource', $http({method: 'GET', url: '/someUrl'}). cursosServices.factory('Nivel', ['$resource', $http({method: 'GET', url: '/someUrl'}). $.ajax({ url: "server", success: function(data){ { $.ajax({ url: "server", success: function(data){ success(function(data, status, headers, config) { success(function(data, status, headers, config) //Update your dashboard gauge //Update your dashboard gauge function($resource){ //… function($resource){ //… salesGauge.setValue(data.value); salesGauge.setValue(data.value); }). }). }, return $resource('/cursos-web/getNiveles', {}, { }); }, dataType: "json", complete: poll, timeout: 30000 dataType: "json", complete: poll, config) error(function(data, status, headers, timeout:{ {}, { }); error(function(data, status, headers, config) { 30000 return $resource('/cursos-web/getNiveles', })(); //… })(); //… query: {method:'GET', params:{}, isArray:true} query: {method:'GET', params:{}, isArray:true} });//más métodos... });//más métodos... }); }); }]); }]);
  • 9. Angular JS - Características  Más ventajas:  Filters  Services  Módulos $route, $location, $services, etc.  Animaciones Y mucho más…
  • 12. Mybatis  Ventajas:        Eliminación de código JDBC (ahorro 95%) Mapping de objetos con registros de BD Configurable por XML o anotaciones Altamente personalizable Soporta múltiples ‘DB vendors’ -> ¡Incluso a nivel de query! Integración con frameworks: mybatis-spring, mybatis-velocity, etc. Inconvenientes:  Fuerza al uso de SQL. No soporta bases de datos no-SQL
  • 13. Mybatis – Mapped Statements  Statements mapeados:  Por XML: <select/> <insert/> <update/> <delete/>  Por código: public interface Mapper { @Lang(MyLanguageDriver.class) @Select("SELECT * FROM BLOG") List<Blog> selectBlog(); }
  • 14. Mybatis – Mapped statements  Ejemplo de sentencia SELECT <select id="selectPerson" <select id="selectPerson" parameterType="int" parameterType="int" resultType="hashmap" resultMap="personResultMap" resultType="hashmap" resultMap="personResultMap" flushCache="false" useCache="true" timeout="10000" flushCache="false" useCache="true" timeout="10000" fetchSize="256" statementType="PREPARED" fetchSize="256" statementType="PREPARED" resultSetType="FORWARD_ONLY"> resultSetType="FORWARD_ONLY"> SELECT titulo, SELECT titulo, activo, activo, profesor profesor FROM TB_CURSOS FROM TB_CURSOS WHERE ID = #{id} ; ; WHERE ID = #{id} </select> </select>
  • 15. Mybatis – Mapped statements JDBC String selectPerson = "SELECT * FROM PERSON WHERE String selectPerson = "SELECT * FROM PERSON WHERE ID=?"; ID=?"; PreparedStatement ps = PreparedStatement ps = conn.prepareStatement(selectPerson); conn.prepareStatement(selectPerson); ps.setInt(1,id); ps.setInt(1,id); MYBATIS <select id=“selectPerson” resultType=“Person”> <select id=“selectPerson” resultType=“Person”> SELECT * FROM PERSON SELECT * FROM PERSON WHERE ID = #{id} WHERE ID = #{id} </select> </select>
  • 16. Mybatis – Mapped statements  Resto de sentencias <delete <update <insert <delete <update <insert id="insertAuthor" id="insertAuthor" parameterType="domain.blog.Author" parameterType="domain.blog.Author" flushCache="true" flushCache="true" statementType="PREPARED" statementType="PREPARED“ statementType="PREPARED" statementType="PREPARED“ timeout="20“ keyProperty="" timeout="20“ keyProperty="" keyColumn="" keyColumn="" > useGeneratedKeys="" timeout="20“ > useGeneratedKeys="" timeout="20“ > >
  • 17. Mybatis – Result maps  Result maps: Mapeo de datos en JavaBeans: <select <select id="selectUsers" id="selectUsers" parameterType="int" parameterType="int" resultType="User“ resultType="User“ > > select user_id as "id", select user_id as "id", user_name as "userName", user_name as "userName", hashed_password as "hashedPassword" hashed_password as "hashedPassword" from some_table from some_table where id = #{id} where id = #{id} </select> </select>
  • 18. Mybatis – Result maps  Result maps: Mapeo de datos en maps externos: <resultMap <resultMap id="userResultMap" id="userResultMap" type="User"> type="User"> <id <id property="id" property="id" column="user_id" /> column="user_id" /> <result <result property="username" property="username" column="username"/> column="username"/> <result <result property="password" property="password" column="password"/> column="password"/> </resultMap> </resultMap>
  • 19. Mybatis – Más ventajas  Sql dinámico: <select <select id="findActiveBlogWithTitleLike" id="findActiveBlogWithTitleLike" parameterType="Blog" resultType="Blog"> parameterType="Blog" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> <if test="title != null"> AND title like #{title} AND title like #{title} </if> </if> </select> </select>    Choose / when / otherwise Trim / where / set Foreach
  • 20. Mybatis – Más ventajas   Constructor Joins:       Association -> 1:1 Composite -> 1:N y N:N Discriminators Cachés Include en queries Múltiples Resultsets: <select id="selectBlog" resultSets="blogs,authors" resultMap="blogResult"> <select id="selectBlog" resultSets="blogs,authors" resultMap="blogResult"> {call getBlogsAndAuthors(#{id,jdbcType=INTEGER,mode=IN})} {call getBlogsAndAuthors(#{id,jdbcType=INTEGER,mode=IN})} </select> </select>
  • 21. Mybatis-spring     Módulo de integración de Mybatis con Spring (>3.0) Fácilmente configurable en el contexto de Spring (XML o @Configuration) Abstrae creación / borrado de sesiones Combina la potencia de Spring (ID, transaccionalidad (Spring-tx / JTA)) y de Java 5+ (anotaciones)
  • 23. Web cursos  Requisitos funcionales:    Acceso al catálogo de cursos Alta de cursos Requisitos no funcionales:       Maven Arquitectura JEE Mybatis AngularJS Spring MVC JSON
  • 25. Web cursos  Tecnologías / frameworks / herramientas:         Spring (MVC, TX, TEST) Mybatis Angular JS Maven Git STS 3.4.0 basado en Eclipse Kepler JDK 1.7 Apache Tomcat 7