Orm final

465 visualizaciones

Publicado el

Informe de Mapeo Objeto Relacional

0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
465
En SlideShare
0
De insertados
0
Número de insertados
3
Acciones
Compartido
0
Descargas
4
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Orm final

  1. 1. Contenido     I. Introducción  II.  Objetivos  III. Desarrollo  3.1 ¿Qué es la persistencia de objeto?  3.2 ¿Qué es ORM?  3.3 Ventajas y Desventajas de ORM  3.4 Herramientas ORM  3.5 Estructura de Hibernate  3.5.1 Archivos a utilizar.  3.5.1.1 Archivos de configuración  3.5.1.2 Archivos de mapeos  3.6 Base de datos a implementar con ORM  3.6.1 Modelo relacional  3.6.2 Descripción de las entidades.  3.6.3 Creación de la base de datos.  3.6.4 Creación de las clases.  3.6.5 Archivos XML  3.6.8 Main.  IV. Conclusión  V. Bibliografía  VI. Anexos       
  2. 2. I. Introducción   Durante el desarrollo de una aplicación suelen estar involucradas dos entidades                      diferentes: el código que mueve la aplicación y los datos que se manejan. Ambas                            entidades han evolucionado de manera diferente, y el acceso a los datos desde los                            programas se ha vuelto una tarea en ocasiones, complicada. Los sistemas de                        Mapeo Objeto­Relacional ayudan a combatir esta complicación.    En el siguiente informe presentamos lo que son las ORM y la utilización que tienen,                              tanto sus ventajas como desventajas, dentro del aspecto de la programación                      (aplicación en sí). Así como existen diferentes aplicativos para realizar la                      “comunicación” entre nuestra aplicación con nuestra base de datos, también                    llamados frameworks.    Se realiza una demostración ejemplo, de un modelo basado en la cantidad de                          trabajadores que realizan algún tipo de proyecto, cuyos empleados pertenecen a                      cierto departamento. Con este aplicativo, se realiza la consulta de los datos que                          existen, todo esto a través del framework a utilizar (en este caso Hibernate), a                            través de la base de datos que otorga postgresql.               
  3. 3. II. Objetivos   2.1 Objetivos Generales:   ● Desarrollar a través de un ejemplo práctico, la aplicación del concepto de Mapeo                          objeto relacional (ORM), mediante la utilización de distintas herramientas                  tecnológicas libres (software), que permitan el desarrollo íntegro del proyecto.    2.2 Objetivos Específicos:   ● Estudiar el concepto Mapeo Objeto Relacional (ORM)  ● Diseñar un mini proyecto que permita aplicar el concepto ORM  ● Utilizar la herramienta Hibernate, para aplicar el proyecto.  ● Realizar el mapeo  mediante archivo XML       
  4. 4.   III. Desarrollo   3.1 ¿Qué es la persistencia de objeto?   La persistencia de objetos es la capacidad que tienen los objetos de sobrevivir al                            proceso que los creó; permitiendo al programador almacenar, transferir y recuperar                      su estado.    3.2 ¿Qué es ORM?   Es un modelo de programación el cual consiste en la transformación de las tablas                            de una base de datos, en una serie de entidades que logren simplificar las tareas                              básicas de acceso a los datos para el programador.    Antes de la aparición de los sistemas ORM, las consultas se tenían que realizar a                              mano dentro de las propias aplicaciones, así la ventaja de los lenguajes orientados                          a objetos se perdía, ya que había que crear una petición a la base de datos de                                  manera manual. Además esta petición debe ser específica para cada sistema, ya                        que no todos los gestores de bases de datos tienen la misma implementación del                            lenguaje SQL.    Ejemplo: Limitar el número de registro de una consulta.  SELECT TOP 10 * FROM usuarios //SqlServer  SELECT * FROM usuarios LIMIT 10 //MySQL  SELECT * FROM usuarios WHERE rownum<=20; //Oracle      Esto supone un problema para el programador, que tendrá que aprender acerca del                          lenguaje de base de datos, y si desea migrar la aplicación a otra, tendrá que                              reescribir un gran número de consultas.    Por lo tanto ORM es: La persistencia automatizada y transparente de las tablas en                            una Base de Datos relacional, usando metadatos (datos que describen a otros                        datos) que definen el mapeo entre los objetos y la Base de Datos.   
  5. 5. Es decir que la aplicación en sí utiliza frameworks, ya que se utiliza una técnica en  donde se ligan las bases de datos y los conceptos de orientación a objetos creando  ”bases de datos virtuales”.       Figura n°1: Mapeo objeto relacional     Una solución ORM esta formada por cuatro partes:    1. Una API que posibilite la realización de operaciones de creación, actualización y                          borrado sobre objetos de clases persistentes.  2. Un lenguaje o API para poder especificar consultas sobre dichas clases.  3. Una opción para especificar mapeo de metadatos.  4. Una técnica para que la implementación del ORM pueda llevar a cabo                          búsquedas, asociaciones u otras funciones de optimización.      3.3 Ventajas y Desventajas de ORM   ❖ Ventajas  ➢ Facilidad y velocidad de uso  ➢ Abstracción de la base de datos usada.  ➢ Seguridad de la capa de acceso a datos contra ataques.  ❖ Desventajas  ➢ En entornos con gran carga poner una capa más en el proceso puede  mermar el rendimiento.  ➢ Aprender el nuevo lenguaje del ORM.         
  6. 6. 3.4 Herramientas ORM   Existen múltiples herramientas para realizar esta persistencia de datos, para el  lenguaje java por ejemplo encontramos algunas tales como:  Hibernate, iBatis,  Ebean, etc.    En el trabajo propuesto se utilizó la herramienta Hibernate. Algunas de sus  características son las siguientes:  ­ No tiene adquisición o cuotas de mantenimiento.  ­ Se integra perfectamente con otros frameworks.  ­ Fácil de aprender y usar.  ­ Flexible: Se puede utilizar con o sin Ejes, a nivel de empresa o aplicaciones  Java.  ­ Es de código abierto.    3.5 Estructura de Hibernate   Para trabajar con Hibernate, hay que definir cómo se trabajará si se usará POJOs  (clases) o no, definir donde se encontrará el archivo de configuración; creación de  la base de datos, definición de las clases persistentes y no persistentes; definición  del mapeo registro­objeto; definir los métodos de acceso a datos y de persistencia  de los datos; programar los métodos y probarlos.    3.5.1 Archivos a utilizar.   Se tiene dos tipos de archivos (propios de Hibernate).  ­ Los tipos de archivos de configuración: Determina todo aspecto relacionado con la  base de datos (conexión, por ejemplo).  ­ Y los archivos que definirán el mapeo.    3.5.1.1 Archivos de configuración   El archivo de configuración (hibernate.cfg.xml) está constituido principalmente por:    Nombre de la propiedad  Uso 
  7. 7. hibernate.connection.driver_class  Controlador clase JDBC   hibernate.connection.url  JDBC URL  hibernate.connection.username  Nombre del usuario de la base de datos  hibernate.connection.password  Contraseña para acceder a la base de  datos.  hibernate.connection.pool_size  Número máximo de un grupo de  conexiones.    También encontramos otras que son opcionales, pero que fue utilizada en el desarrollo  del proyecto:  Nombre de la propiedad  Uso  hibernate.dialect  Permite a Hibernate generar SQL          optimizado para una determinada base de            datos relacional.      A continuación se presentan los diferentes dialectos que existen en hibernate:   
  8. 8.     Finalmente, el archivo hibernate.cfg.xml, quedaría como el ejemplo que se anuncia a  continuación:    <property  name="hibernate.connection.driver_class">org.postgresql.Driver</property>  <property name="hibernate.connection.password">clave</property>  <property  name="hibernate.connection.url">jdbc:postgresql://localhost:5432/postgress </property>  <property name="hibernate.connection.username">postgres</property>  <property  name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property >  <mapping resource="hibernate.hbm.xml"/>       
  9. 9. 3.5.1.2 Archivos de mapeos     Hibernate usa metadatos de mapeo para saber como cargar y almacenar objetos de la  clase persistente. Y tienes ciertas etiquetas que se identificarán a continuación.      <hibernate­mapping>  Elemento raíz que contiene todos los elementos de la clase.    <class>  Los elementos de esta clase, son usados para definir específicos mapeos de la clase de  java a la tabla de base datos.     Ejemplo:   <class name="Event" table="EVENTS">      ...  </class>    ● El atributo name, es el nombre de la clase que se quiere definir como entidad.  ● El atributo table, es el nombre de la base de datos que contiene los datos para  esta entidad.      <meta>  Este elemento es opcional y puede ser usado para crear descripción de clases.    Ejemplo:  <meta attribute="class­description">  This class contains the employee detail.   </meta>      <id>  Este elemento contiene la ID única en la clase para la clave primaria de la base de datos      Ejemplo:  <id name="id" type="int" column="id"> 
  10. 10. …</id>      ● El atributo name, del elemento id, se refiere a la propiedad de la tabla.  ● El atributo column, se refiere a la columna en la tabla de base datos.  ● El atributo type, tiene el tipo de mapeo para hibernate, este tipo de mapeo se  convertirá de Java a un tipo de datos SQL.    <generator>  Se utiliza para generar valores automáticamente en la clave principal.    Ejemplo:  <id name="id" type="int" column="id">  <generator class="native"/>  </id>    En el ejemplo anterior, el elemento generador esta en “native”, para dejar que hibernate  elija cualquier identidad, ya sea secuencia o algoritmo de hilo para crear la clave primaria  dependiendo de la base de datos. También encontramos Assigned, sequence, entre  muchas más.      <property>  Se usa para asignar una propiedad de clase Java a una columna de la base de datos.    Ejemplo:  <property name="firstName" column="first_name" type="string"/>  <property name="lastName" column="last_name" type="string"/>  <property name="salary" column="salary" type="int"/>    ● El atributo name, como siempre hace referencia a la propiedad de la clase.  ● El atributo column, se refiere a la columna en la tabla de base datos.  ● El atributo type, tiene el tipo de mapeo para hibernate, este tipo de mapeo se  convertirá de Java a un tipo de datos SQL      El mapeo final del archivo ejemplo employee.hbm.xml quedaría de la siguiente forma: 
  11. 11.               Figura n°2: Mapeo de la clase Employee a la tabla Employee y sus propiedades      3.5.1.2.1 Relaciones.    Las siguientes, son las etiquetas que logran hacer la asociación de las clases entre las  entidades y las tablas de ORM. Un mapeo de asociación puede ser bidireccional o  unidireccional.     Tipo de mapeo  Descripción.  many­to­one  Mapea la relación mucho a uno  one­to­one  Mapea la relación uno a uno  one­to­many  Mapea la relación uno a mucho  many­to­many  Mapea la relación muchos a muchos.    Cuando se dice unidireccional, se refiere a que la relación será sólo en un sentido y  bidireccional en ambos sentidos.      3.5.1.2.2 Herencia.    Para reflejar la herencia de de una base datos y poder persistir las clases heredadas,  también cuenta con sus propias etiquetas, de las cuales Hibernate da tres opciones a  elegir según las necesidades de la aplicación.    ❖ Tabla por jerarquía de clases: 
  12. 12. Se genera una sola tabla, donde se guardan todas las instancias de la herencia.                            Esta tabla tiene una columna para cada una de las propiedades de cada una de                              las clases que forman la jerarquía.    Para saber a qué clase concreta pertenece una fila de esta tabla se usa un valor                                en una columna discriminadora. Esta columna discriminadora, es importante                  debido a que sabremos qué clase pertenece cada una de las filas de nuestra                            tabla. El valor contenido puede ser cualquiera que nosotros indiquemos para cada                        una de nuestras entidades.    ❖ Tabla por subclase:  Cada una de las clases y subclases que declaren atributos persistentes,                      incluyendo clases abstractas e interfaces, tendrán su propia tabla. Cada tabla                      tiene solamente, las columnas que representan los atributos declarados en la                      clase, junto con una columna para la llave primaria que es también una llave                            foránea de la superclase.     ❖ Tabla por clase concreta :  En este caso se genera una tabla por cada una de las entidades no­abstractas                            que tenga nuestra aplicación. Sin embargo, cada tabla tendrá una columna para                        cada uno de los atributos de la clase de la entidad que almacena, tanto atributos                              propios como heredados.         3.6 Aplicativo   Para la realización del proyecto a desarrollar, se utilizaron las siguientes herramientas:  ­ Datamodeler.  ­ PostgreSQL  ­ Eclipse.  ­ Jboss: Servidor de aplicaciones java EE  ­ Y por supuesto, Hibernate.     
  13. 13. 3.6.1 Modelo relacional               Figura n°3: Modelo relacional de la base de datos.      3.6.2 Descripción de las entidades.   Empleado: Entidad que tiene toda la información de los empleados.  Atributo  Tipo  Descripción  Restricción  ID_Empleados  integer  Se almacena el id del  empleado  Clave Primaria  No nulo  Nombre  varchar  Se almacena el  nombre del empleado  No nulo.  Apellido  varchar  Se almacena el  apellido del empleado  No nulo.  Dirección  varchar  Se almacena la  dirección del  empleado.    Departamento_numero_departament o  integer  Foránea de la tabla  departamento  Clave Foránea.   No nulo.    Ingeniero: Entidad que tiene la información de los empleados que son ingenieros.  Atributo  Tipo  Descripción  Restricción 
  14. 14. ID  integer  Se almacena el id del  ingeniero  Clave Primaria  No nulo  Área  varchar  Se almacena el área  en que traba el  ingeniero  No nulo.    Secretaria: Entidad que tiene la información de los empleados que son Secretaria.  Atributo  Tipo  Descripción  Restricción  ID  integer  Se almacena el id de  secretaria  Clave Primaria  No nulo  Software  varchar  Software que utiliza  secretaria  No nulo.  velocidad_de_tipeo  varchar  Almacena la velocidad  de tipeo de Secretaria  No nulo.    TecnicoProgramador: Entidad que tiene la información de los empleados que son  técnicos programadores.  Atributo  Tipo  Descripción  Restricción  ID  integer  Se almacena el id del  técnico programador  Clave Primaria  No nulo  Lenguaje_favorito  varchar  Se almacena el  lenguaje preferido del  técnico programador.  No nulo.    Departamento: Entidad donde se tiene la información de los departamentos.  Atributo  Tipo  Descripción  Restricción  numero_departamento  integer  Se almacena el id de  departamento  Clave Primaria  No nulo  Nombre  varchar  Almacena el nombre  del departamento.  No nulo.  Ubicación  varchar  Se almacena la  información de la  ubicación del  departamento.  No nulo.   
  15. 15. Proyectos: Entidad que se refiere a la información de los proyectos que se realizan.  Atributo  Tipo  Descripción  Restricción  ID_Proyectos  integer  Se almacena el id de  Proyecto  Clave Primaria  No nulo  Nombre  varchar  Almacena el nombre  del proyecto.  No nulo.  Descripción  varchar  Almacena la  descripción del  proyecto.          Trabaja_en: Entidad que se encuentra en relación con Empleados y Proyectos.   Atributo  Tipo  Descripción  Restricción  empleados_id  integer  Foránea para la tabla  Empleado.  Clave Foránea  No nulo  proyectos_id  integer  Foránea para la tabla  Proyectos.  Clave Foránea  No nulo  Horas  varchar  Se almacena las horas  de trabajo del  proyecto.  No nulo.     
  16. 16. 3.6.3 Creación de la base de datos.   Para crear la base de datos propuesta, se utilizó postgresql. A continuación los códigos  SQL para la creación del modelo ya mostrado (Figura N°3).           
  17. 17.       3.6.4 Creación de las clases.   Se utilizó el IDE eclipse para el desarrollo del aplicativo en cuestión,  se instala Hibernate  como un plug­in para trabajar con él.     Lo primero que se hizo, luego de la creación de la base de datos y la configuración del  IDE con hibernate, fue crear las clases del aplicativo utilizando POJO.     POJO, es una simple clase de Java. Significa: Plain Old Java Object, que contiene  métodos get y set para cada uno de los atributos. En cada clase POJO, se declararon las  entidades de la base de datos, ya antes mostrado, con sus respectivos get y set.    3.6.5 Archivos XML     Mapeo Empleado ­ Departamento    Como se observó en el modelo relacional, la relación entre Empleado y Departamento,  en la cual un empleado pertenece a un departamento y un departamento tiene muchos  empleados, aquí se realizó un mapeo objeto relacional unidireccional en la cual solo  Empleado sabe de la relación con Departamento, no asi departamento quien no sabe de  la relación con empleado, por lo que se hizo un mapeo de muchos a uno.    El mapeo realizado por Hibernate se explica a continuación. 
  18. 18. ondiente nombre en la base de datos empleados, luego  su id en la clase con su tipo de  datos, la columna en la tabla de la base d               Figura n°4: Archivo Employee.hbm.xml       Con la etiqueta del elemento class con el nombre de la clase Employee y su  correspondiente id, luego se genera un  número de secuencia para evitar conflicto de  duplicación de clave primaria, luego las propiedades de la clase Employee (sus atributos)  que se verá reflejado en la base de datos después de realizar el mapeado y Finalmente  la etiqueta many to one con el nombre de la clase a la cual se esta asociando a  Empleados que en este caso es Departamento y la columna que la asocia que es en este  caso Departamento_num_depto con la propiedad no nula.  A continuación la  configuración del XML de Departamento que solo tiene el nombre de la clase su id,  su  generador y sus propiedades ya que no sabe de la relación con Empleados.     
  19. 19.             Figura n°5: Archivo Departamento.hbm.xml   Mapeo Empleado ­ Proyecto    De antemano se crea la base de datos, es decir se crearon cada una de las tablas  correspondientes a cada entidad incluyendo la tabla que se crea por la relación entre  empleados y proyecto (tabla trabajan_en).    Como se observó en el modelo relacional, la relación entre Empleado y Proyecto es que  un empleado puede trabajar en muchos proyectos y un proyecto puede tener asociado  muchos empleados, aquí se realizó un mapeo objeto relacional unidireccional en la cual  solo Proyecto sabe de la relación con Empleados, no asi empleado quien no es  “conciente” de la relación con proyecto, por lo que se hizo un mapeo esta  de muchos a  muchos por lo que Hibernate crea automáticamente la tabla unión trabajan_en, la  desventaja de esta opción es que no es posible llenar el atributo horas que se encuentra  en la tabla trabajan_en. Se hizo un mapeo muchos a muchos como se puede observar  en la siguiente figura número 6.                  Figura n°6: Archivo Proyectos.hbm.xml     El archivo XML correspondiente a Empleados es el mostrado en la figura número 4  ya  que empleados no sabe de la relación con proyectos ya que es unidireccional.             
  20. 20.     Mapeo Empleado ­ TecnicoProgramador                  Figura n°7: Segunda parte del Archivo Employee.hbm.xml donde se observa el mapeo  de  la herencia    Figura n°8:  Archivo de configuración TecnicoProgramador.hbm.xml    3.6.8 Consultas.   Hibernate proporciona 4 métodos para poder realizar consultas sobre las bases de datos,  estas consultas    Tipos de Consultas Hibernate:    Hibernate permite 4 tipos de consultas, las cuales todas primero se ejecutan sobre la  capa virtual de hibernate y luego se traducen a lenguaje SQL, algunos métodos  requieren menos trabajo de conversión debido a la forma en la cual permite trabajar, a  continuación se presentan los métodos de consultas:   
  21. 21. 1. HQL(Hibernate Query Language), es un híbrido entre Sql y Orientación Objeto,  permite consultas CRUD(Create, Read,Update, Delete).    2. Criteria API, Orientado Puramente a orientación a objeto, solamente permite  Operaciones de selección.    3. Native SQL , es un lenguaje Orientado Totalmente a SQL, permite CRUD, la     4. SQL nombradas, es un lenguaje orientado a Sql , su declaración debe ser en el  archivo de mapeo, su uso es para situaciones en la cual se requieren muchas  instrucciones sql de un solo tipo.    Declaración y Acceso de Consultas en Hibernate:    HQL: dentro del identificador createQuery se ingresa la consulta SQL, pero se debe tener  cuidado, debido a que no acepta el identificador * , por lo que es necesario crear un alias.  El identificador setLong, permite modificar un valor dinámicamente, en este ejemplo se  observa el valor 0 que representa al primer símbolo “?” que se encuentra, una vez  realizada la consulta de obtiene la query en una lista.    Criteria API  Para la utilización de esta técnica es necesario declarar que es de tipo Criteria , con el  método createCriteria,dentro de esta como atributos se define la clase a la cual se hará  referencia, el método add, restrictions , nos permiten acotar la búsqueda, existen muchos  métodos que se pueden conjugar con Restrictions, luego el método eq realiza una  comparación del “atributo”, y algún valor obtenido, finalmente se obtiene el resultado en  una lista.    Native SQL    Orientado totalmente a SQL se necesita declarar el método createSQLQuery, para  indicar que se utilizara este método,como argumentos recibe la consulta SQL y addEntity  hace referencia a la clase que se utilizará.   
  22. 22.   SQL Nombradas    Para esta técnica es necesario escribir dentro del archivo de mapeo XML la sentencia  <sql­query name=”nombre de la consulta”> y el valor de retorno con la sentencia return,  luego de esto se escribe la consulta SQL, para luego finalizar con el cierre de la etiqueta  inicial.    Para invocar esta consulta se necesita escribir la última sentencia de la imagen, haciendo  referencia con el método getNameQuery(“nombre de consulta”).              IV. Conclusión   La técnica de programación de mapeo objeto relacional (ORM), es esencial en los                          tiempos actuales debido a que la mayoría de los lenguajes de programación poseen un                            paradigma orientado a objeto, además entrega el soporte necesario para poder utilizar la                          persistencia de datos, en base de datos relacionales, las cuales ocupan un gran campo                            en el mercado actual y tiene el soporte necesario para muchos lenguajes.   Hibernate, una herramienta ORM con licencia de software libre, creada en base al                          lenguaje de programación Java, se ha patentado en el negocio de la programación a lo                              largo de los años dentro de los primeros lugares, entregando la flexibilidad necesaria                          para realizar persistencia de programas orientados a objetos, esto a través de una capa                            virtual que se posiciona sobre la BD relacional, además Hibernate plantea una estructura                          que permite la rigurosidad necesaria para diseñar programas altamente funcionales, sin                      limitar el procesamiento de datos.  A pesar de los inconvenientes con el mapeo mediante el archivo XML creemos que con  hibernate si la base de datos ya esta creada y se tiene un ORM no nos haría falta tener  un modelo en adelante de las uniones de las tablas, bastaría con conocer que objetos  deberíamos invocar y apartir de ahi trabajar sobre la base de datos por lo que se llega a 
  23. 23. la independencia de los distintos SQL , por lo que no tendríamos que pensar en el SQL  de Mysql o el SQL de Oracle por ejemplo, cuando se quiera cambiar el gestor de bases  de datos y modificar todas las consultas por lo que  logra abstraerse de los  particularidades de un tipo de bases de datos, sin embargo técnicamente no significa que  no se tenga que aprender una base de datos como en el caso de que si queremos hacer  un cambio a nivel de tabla ahi nos vemos obligados a  conocer la base de datos como  también en el caso de llamadas especiales se debe bajar a usar SQL en la base de datos  directamente.         
  24. 24. V. Bibliografía   ❏ Chapter 2. Tutorial Using Native Hibernate APIs andhbm.xml Mappings.                  Recuperado de:    https://docs.jboss.org/hibernate/orm/3.6/quickstart/en­US/html/hibernate­gsg­tutori al­basic.html    ❏ Hibernate Tutorial. Recuperado de:        http://www.tutorialspoint.com/hibernate/index.htm    ❏ Chapter 3. Configuration. Recuperado de:  https://docs.jboss.org/hibernate/orm/3.3/reference/en­US/html/session­configuratio n.html    ❏ Capítulo 9: Mapeo de Herencias. Recuperado de:  https://docs.jboss.org/hibernate/orm/3.5/reference/es­ES/html/inheritance.html    ❏ Generator classes in Hibernate. Recuperado de:  http://www.javatpoint.com/generator­classes      VI. Anexos

×