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