Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ORM
...
Atributos Tuplas
Base de Datos
Base de Datos
Aplicación 1 Servicio 1
Aplicaciones para Servicios para
Usuarios Finales Aplicaciones
SQL Server
MySQL
PosgreeSQL
Oracle
DB2
…
Aplicación N Servicio N
SQL
Structured Query Language
Las Bases de Datos relacionales utilizan una interfaz para acceder a ellos llamada
SQL o Structured Query Language (Lenguaje Estructurado de Consultas) que
permiten hacer solicitudes/peticiones a una base de datos usando una notación
muy similar a lenguaje natural.
identificador password
jperez 123456
plopez abc123
marce rt6%78d
palvarez 4uhdf76/4
mcortez asdasds
Structured Query Language
CREATE DATABASE `ejemplo` /*!40100 DEFAULT CHARACTER SET utf8 */;
INSERT INTO rol (codigo, descripcion, tipo) VALUES(“rol01”, “arqueo de datos”, 0);
POO
PROGRAMACIÓN ORIENTADA A OBJETOS
POO
Programación Orientada a Objetos
EntidadUsuario.CodigoUsuario = txtIdentificador.Text;
EntidadUsuario.Descripcion = txtDescripcion.Text
conexion = OpenDataBaseConecction(parametros);
sqlCommand = new sqlCommand(“INSERT INTO usuario (identificador, password)
VALUES(EntidadUsuario.CodigoUsuario,
EntidadUsuario.Descripcion);
”);
conexion.ExecuteSqlCommand(sqlCommand);
conexion.ExecuteSqlCommit();
“Las operaciones a la Base de Datos se realizan a “MANO”, lo que hace que la ventaja de los lenguajes
Orientados a Objetos se pierda, ya que había que crear una petición a la base de datos de manera
manual (y específica para cada sistema, ya que no todos los gestores de bases de datos tienen la
misma implementación del lenguaje SQL).”
“Es necesaria una adaptación de los datos a la aplicación además del aprendizaje del lenguaje de
gestión de la Bases de Datos” AAPP
ARQUITECTURA DE APLICACIONES
Arquitectura de aplicaciones
3 - LAYER
Permitir el ingreso de datos del Usuario
Mostrar información en la IU
Capturar eventos de la IU
PRESENTACION Enviar información del usuario a la Capa de Negocio
Recibir y presentar los resultados del procesamiento
Devolver Invocar en la Capa de Negocio
ORM
OBJECT-RELATIONAL MAPPING
Object-Relational Mapping
¿Qué es ORM?
Una cancelación de una transacción, deshace las instrucciones ejecutadas hasta dejar la
base de datos en su estado inicial, como si la orden de la transacción nunca se hubiese
realizado.
Una transacción debe contar con ACID (un acrónimo inglés) que quiere decir: Atomicidad,
Consistencia, Aislamiento y Durabilidad. Entonces para que un Sistema de Gestión de Bases
de Datos sea considerado Transaccional, debe cumplir con estos criterios (ACID).
Propiedad de los sistemas que permiten que múltiples procesos sean ejecutados al mismo
tiempo, y que potencialmente puedan interactuar entre sí.
Los procesos concurrentes pueden ser ejecutados realmente de forma simultánea, sólo
cuando cada uno es ejecutado en diferentes procesadores.
Debido a que los procesos concurrentes en un sistema pueden interactuar entre otros
también en ejecución, el número de caminos de ejecución puede ser extremadamente
grande, resultando en un comportamiento sumamente complejo.
La memoria cache es un búfer especial de memoria que poseen las computadoras, que
funciona de manera similar a la memoria principal, pero es de menor tamaño y de acceso
más rápido.
Cuando se accede por primera vez a un dato, se hace una copia en la cache; los accesos
siguientes se realizan a dicha copia, haciendo que sea menor el tiempo de acceso medio al
dato.
Cuando la aplicación necesita leer desde la Base de Datos, primero verifica si una copia de
los datos está en la caché; si es así, se lee desde ahí, sino se hace el acceso hasta la Base de
Datos.
Object-Relational Mapping
Usuario EntidadUsuario = new Usuario();
EntidadUsuario.CodigoUsuario = txtIdentificador.Text;
EntidadUsuario.Descripcion = txtDescripcion.Text
conexion = OpenDataBaseConecction(parametros);
sqlCommand = new sqlCommand(“INSERT INTO usuario (identificador, password)
VALUES(EntidadUsuario.CodigoUsuario,
EntidadUsuario.Descripcion);
”);
conexion.ExecuteSqlCommand(sqlCommand);
conexion.ExecuteSqlCommit();
//********************************************************************************//
Usuario EntidadUsuario = new Usuario();
EntidadUsuario.CodigoUsuario = txtIdentificador.Text;
EntidadUsuario.Descripcion = txtDescripcion.Text
Session_Conexion.Save(EntidadUsuario);
DOC
Object-Relational Mapping
DOCTRINE - PHP
Doctrine es una librería muy completa y muy
configurable.
Generación automática del modelo. (cuando
se diseña un modelo relacional y un modelo
de clases, suelen ser parecidos. Doctrine se
aprovecha de esta similitud y nos permite
generar de forma automática el modelo de
clases basándose en el modelo relacional de
tablas.)
Posibilidad de trabajar con YAML. (Formato
de serialización de datos legible
Buscadores mágicos (Magic finders) . (find(),
findByNombreAtributo(), findAll())
Relaciones entre entidades.
Doctrine Query Language - DQL.
Extrae objetos de la base de datos, no tuplas.
No es necesario escribir los joins a mano.
Object-Relational Mapping
HIBERNATE - JAVA
• Es una capa de persistencia objeto/relacional y un
generador de sentencias SQL.
• Emplea atributos declarativos mediante XML
(mapeo de objetos relacionales en ficheros) o
Anotaciones (directo en el código fuente).
• Compilador de Archivos de Mapeo (BuildSessionfactory),
incorporado, para la validación de archivos HBM.
• Soporte de: Generics, Nullable Types, Stored Procedures, Named Queries, Sql, Hql,
ICriteria, Ienumerable.
• Soporte de Transacciones de forma natural.
• Soporte de caching (nivel 1 por defecto, y nivel 2 a través de configuración en la
SessionFactory)
• Soporte de Concurrencia, a través del elemento TimeStamp o el tag Version, en el archivo
de mapeo.
• Control de datos de Auditoria, a través de la interfaz Iinterceptor o IListener.
• Mapeo con herencia: table-per-class-hierarchy, table-per-subclass, table-per-concrete-
class
• Licencia GNU/LGPL y posee una versión para .NET llamada nHibernate.
Object-Relational Mapping
ENTITY FRAMEWORK - VISUAL STUDIO
Conjunto de APIs que proporcionan acceso a datos en .NET.
Se distribuye junto con el .NET Framework 3.5 SP1.
Modos de trabajo
Database First: Comenzando con la Base de Datos, crea las
entidades y los mapeos a partir de ellas.
Model First: Cuando solo se tiene las entidades, y a partir de ellas
crear la estructura de la Base de Datos.
Code First: Cuando se está en total control de todos los aspectos del
ciclo de vida del desarrollo. Definición de manera manual, las clases,
relaciones y mapeos, generación del código para crear la Base de
Datos.
Soporte de Async tanto para hacer consultar como para guardar datos.
Connection Resiliency - Conexión Flexible, para toma de acciones cuando no se tiene
conexión a la Base de Datos.
Configuración por código.
Registro de interceptación SQL, proporciona bloques de bajo nivel para la interceptación
de las operaciones para los Logs.
Soporte de consultas Enumerable.Contains con LINQ.
Implementaciones personalizadas de Equals o GetHashCode en las entidades.
EJE
Object-Relational Mapping
EJEMPLO EN PHP-DOCTRINE
YAML Anotaciones
namespace Ejemplo\Datos\Entity;
use Doctrine\ORM\Mapping as ORM;
# /**
src/Ejemplo/Datos/Resources/config/doctrine/Usuario.o * @ORM\Entity
rm.yml * @ORM\Table(name="tusuario")
Ejemplo\Datos\Entity\Usuario: */
type: entity class Usuario
table: usuario {
id: /**
identificador: * @ORM\Id
type: string * @ORM\Column(type="string", length=16)
length: 16 */
generator: { strategy: AUTO } protected $identificador;
fields:
password: /**
type: string * @ORM\Column(type="string", length=50)
length: 50 */
protected $password;
}
identificador password
<php jperez 123456
plopez abc123
$usuario = new Usuario();
$ usuario ->identificador = “jperez”; marce rt6%78d
$ usuario ->password = “123456”; palvarez 4uhdf76/4
$ usuario ->save();
mcortez asdasds
Object-Relational Mapping
VISUAL STUDIO C# - NHIBERNATE
Entidad Usuario Archivo de Mapeo
namespace Entidades
{ <?xml version="1.0" encoding="utf-8" ?>
/// <summary> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
/// Define la Clase. namespace=“Entidades"
/// </summary> assembly=" Entidades "
[Auditable] default-lazy="true">
public class Usuario
{ <class name="Usuario" table=“tusuario">
/// <summary>
/// Gets or sets Identificador. <id name=“Identificador" column=“identificador">
/// </summary> <generator class="assigned"/>
public virtual string Identificador { get; set; } </id>
jperez 123456
Usuario usuario = new Usuario(
Identificador = “jperez”, plopez abc123
CRUD
Consultas (SQL)
Auditoria
Concurrencia
Rendimiento
Caching
Herencia
Cambios a partir del Modelo o
BD
Existen Herram.
BD desde 0
Generación de Código (Clases) adicionales
Transacciones
299 Developer Licencia 200
Costo ($us) 999 por Licencia Gratuito Gratuito Gratuito $us Gratuito Gratuito Gratuito 149,99 (sin SC)
Código Fuente Open Source 499 Source Open Source Open Source Open Source Open Source Open Source 199,99 (con SC)
.CS .CS .CS .CS .CS
Mapeo (.XML ó .CS) .XML ó .CS XML
Dirección de Mapeo Ambos
BD a Entidad BD a Entidad BD a Entidad BD a Entidad BD a Entidad BD a Entidad
(generación) Ambos sentidos Entidad a BD sentidos Ambos sentidos
Documentación/Soporte
Generación de IU
Tiempo en el aprendizaje
Este tipo de herramientas suelen ser complejas por lo que su correcta
utilización lleva un tiempo que hay que emplear en ver el funcionamiento
correcto y ver todo el partido que se le puede sacar.
Bulk Data
No es recomendable para persistir grandes volúmenes de Datos (Bulk data
manipulations).
VENTAJAS
Ventajas
Reduce la escritura de código por el desarrollador en cuanto a la persistencia de
datos.
Si el nombre de algún atributo (columna) cambia, no es necesario reescribir el
código.
Abstracción de la base de datos
Al utilizar un ORM, lo que conseguidos es separarnos totalmente del Gestor de
Base de datos que se utiliza.
Reutilización.
Nos permite utilizar los métodos (persistencia) de un objeto de datos desde
distintas zonas de la aplicación, incluso desde aplicaciones distintas.
Seguridad. Los ORM suelen implementar controles para evitar tipos de ataques tal
como SQL injection.
Mantenimiento del código
Nos facilita el mantenimiento del código debido a la correcta ordenación de la
capa de datos, haciendo que el mantenimiento del código sea mucho mas
sencillo.
Lenguaje propio para realizar las consultas
Muchos ORM’s traen su propio lenguaje para hacer las consultas, lo que hace
que los usuarios dejen de utilizar SQL para que pasen a utilizar el lenguaje
propio de cada herramienta.
OBJECT-RELATIONAL MAPPING