unidades:01_introduccion_orm:06_intro_orm
Diferencias
Muestra las diferencias entre dos versiones de la página.
— | unidades:01_introduccion_orm:06_intro_orm [2023/04/07 21:26] (actual) – creado - editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
+ | ====== Introducción a los ORM ====== | ||
+ | En este tema vamos a empezar a explicar qué ese un ORM e Hibernate , pero empecemos con los ORM. | ||
+ | |||
+ | Las siglas ORM significan " | ||
+ | |||
+ | Es decir, es un framework de persistencia de nuestros datos a una base de datos. | ||
+ | |||
+ | Veamos un ejemplo en el que suponemos que estamos desarrollando el programa [[http:// | ||
+ | El programa tendrá la clase '' | ||
+ | |||
+ | <uml> | ||
+ | class Profesor | ||
+ | Profesor : int id | ||
+ | Profesor : String nombre | ||
+ | Profesor : String ape1 | ||
+ | Profesor : String ape2 | ||
+ | </ | ||
+ | |||
+ | Pero los objetos de la clase '' | ||
+ | |||
+ | <uml> | ||
+ | class Profesor << | ||
+ | Profesor : INTEGER id | ||
+ | Profesor : VARCHAR nombre | ||
+ | Profesor : VARCHAR ape1 | ||
+ | Profesor : VARCHAR ape2 | ||
+ | </ | ||
+ | |||
+ | El código Java que, dado un objeto '' | ||
+ | |||
+ | Ahora te estarás preguntando, | ||
+ | Si pero: | ||
+ | * ¿Cuántas veces has llamado a <javadoc jdk7> | ||
+ | * ¿Y qué hay del código de JDBC cuando la clase '' | ||
+ | * ¿Y de hacer las validaciones antes de guardarlo? | ||
+ | * ¿Recuerdas el día en el que el DBA (( Administrador de Base de Datos )) te pidió que cambiaras el nombre de varias columnas de la base de datos? \\ Estuve semanas revisando el código para estar seguro de que no me había dejado ninguna línea sin cambiar. Al volver a casa mi hijo ya no me conocía. | ||
+ | |||
+ | Dejando a parte esta pequeña broma, usar JDBC directamente tiene muchos problemas. Lo normal es que para evitar toda esta repetición de código los programadores empecemos a hacernos nuestras utilidades que nos ahorran mucho esfuerzo. Estas utilidades son el principio de un ORM. Gavin King pensó lo mismo (( Realmente lo hizo para evitarse usar EJB y no JDBC )) y acabó haciendo Hibernate. | ||
+ | |||
+ | Es decir que Hibernate es simplemente una serie de clases Java (( framework )) que nos ayudaran a insertar, leer, actualizar borrar nuestros objetos en la base de datos. | ||
+ | |||
+ | ===== Historia de los ORM en Java ===== | ||
+ | En la comunidad Java se ha tenido claro que al programar es necesario usar un ORM y por ello se han creado gran cantidad de ORM. Pasemos a hacer un repaso de la historia de los ORM en Java. | ||
+ | |||
+ | <note tip>Como historia que es ésto, es totalmente mi visión de subjetiva de los acontecimientos</ | ||
+ | |||
+ | ==== EJB ==== | ||
+ | En 1999 el [[http:// | ||
+ | |||
+ | Volvieron al ataque con EJB 2.0 en el año 2001 y con EJB 2.1 en el año 2003 con el [[http:// | ||
+ | Un caso curioso fue el de Rod Johnson (( El creador del Framework Spring )) , que escribió un libro titulado [[http:// | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== JDO ==== | ||
+ | Por otro lado en el [[http:// | ||
+ | * Las clases a persistir (por ejemplo la clase '' | ||
+ | * No necesitaba de un Servidor de Aplicaciones para funcionar | ||
+ | * Podía persistir a otro tipo de repositorios de datos que no fueran bases de datos relacionales | ||
+ | |||
+ | Con todo ello JDO era superior a los EJB, ¿qué pasó? Que JDO nunca ha tenido el apoyo de las grandes empresas ni ha sido '' | ||
+ | |||
+ | < | ||
+ | No es que nadie use JDO pero comparado con otras tecnologías de persistencia podríamos decir que está en un segundo plano. | ||
+ | </ | ||
+ | ==== Hibernate ==== | ||
+ | Hasta ahora hemos visto las tecnología de EJB y JDO. Estas tecnologías son únicamente las especificaciones y necesitan de alguien que haga las implementaciones de dichas especificaciones. | ||
+ | |||
+ | En 2001 Gavin King creó Hibernate. Harto de los EJB, no se basó en ningún JSR ni ninguna especificación, | ||
+ | |||
+ | ¿Cuál ha sido el éxito de Hibernate? Mi opinión es la siguiente: | ||
+ | * No depende de estándares, | ||
+ | * Al igual que JDO no es necesario implementar interfaces o heredar de clases. | ||
+ | * Realiza sólo una cosa y la hace bien: Sólo se puede persistir a bases de datos relacionales, | ||
+ | |||
+ | ¿Pero cuál es, entonces, la desventaja de Hibernate? | ||
+ | La principal desventaja es que al no haber una especificación detrás de él , si usas Hibernate ya no puedes cambiar de framework de persistencia tan fácilmente como podrías usando JDO o EJB. | ||
+ | |||
+ | < | ||
+ | Realmente creo que ésto es un poco un mito. Aunque uses EJB o JDO cambiar de implementación no debe ser tan sencillo como nos lo quieren hacer ver. | ||
+ | </ | ||
+ | |||
+ | ==== JPA ==== | ||
+ | El último que ha aparecido en esta historia es JPA . JPA es una especificación del JCP al igual que JDO y EJB. Inicialmente JPA se desarrolló en el mismo JRS que EJB 3.0 [[http:// | ||
+ | |||
+ | ¿Y cómo encaja JPA en todo ésto? \\ | ||
+ | Mi opinión personal es que no entiendo para qué crear JPA existiendo ya JDO. Sin embargo, JPA está teniendo el éxito que JDO nunca tuvo así que, siendo pragmáticos , JPA es **el estándar** de persistencia en Java y para aupar más aún a JPA ,Hibernate implementa la especificación de JPA pero no la de JDO. Así que ahora podemos usar Hibernate siguiendo un estándar por lo que podríamos cambiar de Hibernate a otra implementación sin problemas. | ||
+ | |||
+ | ===== Hibernate ===== | ||
+ | Después de dar un repaso a todas las tecnologías de persistencia, | ||
+ | |||
+ | Para hacer la persistencia de nuestros objetos Java a la base de datos hay que indicar cómo se debe realizar dicha persistencia. Para ello hay dos métodos: | ||
+ | * Ficheros XML | ||
+ | * Anotaciones en el código. | ||
+ | |||
+ | Las anotaciones que tiene Hibernate son actualmente las del estándar de JPA. De esa forma al ver las anotaciones de hibernate estaremos viendo las de JPA.Cuando veamos los ficheros XML usaremos los ficheros propietarios de Hibernate, así también veremos cómo funciona realmente Hibernate. | ||
+ | |||
+ | En cuanto al API de Java , vamos a ver únicamente el API de Hibernate. | ||
+ | |||
+ | ¿Y por qué no dar sólo JPA sobre Hibernate ? \\ | ||
+ | JPA sigue siendo un estándar de JCP , lo que conlleva un proceso lento de nuevas versiones y funcionalidades. Usando Hibernate directamente tendremos acceso a las funcionalidades específicas de Hibernate que no están cubiertas en el estándar de JPA y tampoco hay que ser tan estricto. Hibernate ha funcionado con éxito muchos años en Java sin necesidad de JPA, así que no vamos a perder ahora todas las ventajas de ofrece Hibernate frente a JPA. | ||
+ | |||
+ | Resumiendo , éste va a ser un curso de Hibernate en el que muchas de las cosas que expliquemos será usando el estándar de JPA. | ||
+ | |||
+ | |||