Un ORM o Mapeador Objeto-Relacional es un framework que permite mapear objetos de una aplicación a tablas de una base de datos relacional, resolviendo las diferencias entre los paradigmas orientado a objetos y relacional. Los ORMs permiten reducir el código necesario para realizar operaciones de persistencia al mapear automáticamente los objetos a sentencias SQL. Hibernate es un ORM popular para Java que mapea objetos mediante archivos XML y proporciona un lenguaje de consultas para recuperar y almacenar datos en la base de datos.
2. ORM
Un ORM o Mapeador Objeto-Relacional es un
framework que propone una nueva forma de modelar los
datos, y que permite solucionar la diferencia que existe
entre los paradigmas de la POO (Programación
Orientada a Objetos) y el modelo Relacional.
El modelo Relacional trata con relaciones y conjuntos
por lo cual tiende a ser de carácter matemático, mientras
que el modelo de la POO trata con objetos y las
asociaciones entre ellos; el problema entre estos dos
modelos surge en el momento de querer persistir los
objetos de negocio.
3. ORM
Escritura mediante JDBC abrir una conexión, crear una
sentencia en SQL y copiar todos los valores de las
propiedades de un objeto en la sentencia, ejecutarla y así
almacenar el objeto.
Sencillo para un caso simple.
Complicado si el objeto posee muchas propiedades, o bien se
necesita almacenar un objeto que a su vez posee una colección de
otros elementos. Se necesita crear mucho más código, además del
tedioso trabajo de creación de sentencias SQL.
Lectura mediante JDBC mismo problema que la escritura.
Este problema se conoce con el nombre de “Impedancia
Objeto-Relacional” conjunto de dificultades técnicas que
surgen cuando una base de datos relacional se usa en
conjunto con un programa escrito bajo POO.
4. ORM
Ejemplo de “Impedancia Objeto-Relacional”
Objeto Agenda Telefónica con atributo una
colección de objetos de la clase Persona, en la
que a cada persona le corresponde su
correspondiente atributo “teléfono”.
Al transformar esto a relacional se ocuparía más
de una tabla para almacenar la información
varias sentencias sql y mucho código.
6. ORM
Los ORMs (además de mapear)
Permiten reducir susceptiblemente el código necesario para
llevar a cabo las operaciones de persistencia y recuperación de
objetos
Proporcionan interfases más simples para el manejo de objetos
a través de su propio lenguaje de consulta
Proveen al programador de configuraciones que le permiten
optimizar los tiempos de respuesta en sus correspondientes
aplicaciones
ORMs más conocidos
Hibernate Código libre
Toplink Oracle
JPA (viene con EJB 3.0 y toma las ideas de Hibernate) Sun
7. ORM
Una herramienta ORM trata de hacer todas estas
operaciones de mapeo pesadas por nosotros.
Con una buena ORM, sólo tendremos que definir la
forma en la que establecemos la correspondencia entre
las clases y las tablas una sola vez (indicando que
propiedad se corresponde con que columna, que clase
con que tabla, etc.).
Después de esto, podremos utilizar los objetos de
nuestra aplicación y decirle a nuestra ORM que los haga
persistentes, con una instrucción similar a:
orm.save(myObject).
8. ORM - Hibernate
Herramienta para la Java que facilita el mapeo de atributos
entre una base de datos relacional y el modelo de objetos de
una aplicación, mediante archivos declarativos (XML) que
permiten establecer estas relaciones.
Parte de una filosofía de mapear objetos Java "normales",
también conocidos en la comunidad como "POJOs" (Plain Old
Java Objects).
Proporciona un potente lenguaje de consultas (HQL):
subqueries, outer joins, ordering, proyección (report query),
paginación, etc.
Lenguaje intermedio que según la base de datos que usemos y
el dialecto que especifiquemos será traducido al SQL
dependiente de cada base de datos de forma automática y
transparente.
9. ORM – Hibernate
Hibernate distingue entre objetos tipo transient y
tipo persistent
Transient: objetos que sólo existen en memoria y no en
un almacén de datos. En algunos casos, no serán
almacenados jamás en la base de datos y en otros es
un estado en el que se encuentran hasta ser
almacenados en ella. Han sido instanciados por el
desarrollador sin haberlos almacenado mediante una
sesión.
Persistent: objetos que ya han sido almacenados y, por
tanto, son objetos persistentes. Han sido creados y
almacenados mediante una sesión o bien devueltos en
una consulta realizada con la sesión.
10. ORM – Hibernate
Para almacenar y recuperar objetos de la base de datos, el
desarrollador debe mantener una conversación con el
motor de Hibernate mediante un objeto especial, quizás el
concepto clave más importante dentro Hibernate, que es la
Sesión (clase Session).
Un Session se puede equiparar a grandes rasgos al
concepto de conexión de JDBC y cumple un papel muy
parecido, es decir, sirve para delimitar una o varias
operaciones relacionadas dentro de un proceso de
negocio, demarcar una transacción y aporta algunos
servicios adicionales.
La clase Session ofrece métodos como save(Object
object), createQuery(String queryString),
beginTransaction(), close(), etc. para interactuar con la BD.
La clase que permite crear sesiones se denomina
SessionFactory.