SlideShare una empresa de Scribd logo
Persistencia de Objetos Ing. Ronald Cuello Meza
Que es un ORM Es una técnica de programación para convertir datos entre el sistema de tipos utilizado en un lenguaje de programación orientado a objetos y el utilizado en una base de datos relacional. En la práctica esto crea una base de datos orientada a objetos virtual, por sobre la base de datos relacional. Esto posibilita el uso de las características propias de la orientación a objetos (básicamente herencia y polimorfismo). Hay paquetes comerciales y de uso libre disponibles que desarrollan el mapeo relacional de objetos, aunque algunos programadores prefieren crear sus propias herramientas ORM. (Fuente Wikipedia)
Ventajas de un ORM ,[object Object]
Trabajar con las clases diseñadas en su modelo del dominio
Permite elegir la base de datos relacional con la que queramos interactuar (SQLServer,PostGreSQL,MySQL,Oracle…)
Genera automáticamente el código SQL usando un mapeo objeto-relacional ,el cual se especifica en un documento XML o anotaciones
Permite crear,modificar,recuperar y eliminar objetos persistentes recuperarlos,ademas nos permite navegar por las asociaciones entre objetos y luego actualizarlos al finalizar una transacción.,[object Object]
 Enterprise Objects Framework
OpenStep
WebObjects
 Java Data Objects (JDO)
 Enterprise Java Beans
Hibernate
NHibernate
iPersist
Linq
EntityFramework
CastleActiveRecord
Oracle TopLink,[object Object]
Bajo acoplamiento entre negocios y persistencia
Desarrollo rápido,[object Object]
Que es Hibernate Es una herramienta de Mapeo objeto-relacional para la plataforma Java que facilita el mapeo de atributos entre una base de datos relacional tradicional y el modelo de objetos de una aplicación, mediante archivos declarativos (XML) que permiten establecer estas relaciones. Usa el mecanismo de reflexión de Java, que permite a un objeto en ejecución examinarse y manipularse a sí mismo.
Características ,[object Object]
Buena documentación y comunidad amplia y activa
Manejo de transacciones,Caché,asociaciones,polimorfismo,herencia,persistencia transitiva, estrategias de fetching
Potente lenguaje de consulta (HQL) ,subqueries,outer joins,ordering,paginacion,etc
Fácil testeo
Cada clase persistente necesita un fichero XML de mapeo del que obtiene toda la información para realizar las operaciones CRUD
No es un Standard (Es un Framework),[object Object]
Hibernate Vs JDBC ¿Cuál es la gran diferencia entre el código tradicional JDBC y el código que escribimos con Hibernate? “Ha desparecido el SQL”. Lo único que digo es que quiero “guardar” (save) un objeto.
Dialectos de Hibernate Hibernate soporta, actualmente, los siguientes dialectos:
Ejemplo Diagrama de entidad relación.
Ejemplo Diagrama de clases.
Que se necesita Una serie de JavaBeans que son las clases a persistir  Un archivo XML por cada una de estas clases (MiClase.hbm.xml) que indica el mapping entre objetos y relaciones Crear/Configurar el archivo del framework hibernate.cfg.xml
Configurar JavaBean Este sería el aspecto del JavaBean que representa un Empleado en una supuesta aplicación: packagemx.model;  public class Empleado implementsSerializable{ private Long id; privateString nombre; privateString apellido; // SettersGetters    …. }
Estructura del fichero XML Esquema general de un fichero XML de mapeo es algo como esto:  <Encabezado XML>        <Declaración de la DTD>               <class - Definición de la clase persistente>                    <id - Identificador>                         <generator - Clase de apoyo a la generación automática de OID's>                  <property – propiedades de la clase>                  <!--***************Asociaciones *************** --> 	   <!--Posibles relaciones con otras entidades persistentes-->                  <one-to-many > 	   <many-to-many> 	   <many-to-one> 1 2 3 4 5 6
Estructura del fichero XML <?xmlversion="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping>   <class name="mx.model.Empleado" table="empleados">       <id name="id" column="id">           <generator class="native"/>       </id>       <property name="nombre" column="nombre" />       <property name="apellido" column="apellido" />   </class> </hibernate-mapping>
Estructura del fichero XML 1 Declaración de la DTD.  El documento DTD que usaremos en nuestros ficheros XML se encuentra en cada distribución de Hibernate en el propio .jar o en el directorio src. Elemento Raíz <hibernate-mapping>. Dentro de él se declaran las clases de nuestros objetos persistentes. Aunque es posible declarar más de un elemento <class> en un mismo fichero XML, no debería hacerse ya que aporta una mayor claridad a nuestra aplicación realizar un documento XML por clase de objeto persistente. 2 <class>.  Este es el tag donde declaramos nuestra clase persistente. Una clase persistente equivale a una tabla en la base de datos, y un registro o línea de esta tabla es un objeto persistente de esta clase. Entre sus posibles atributos destacaremos :  ,[object Object]
table: Nombre de la tabla en la BBDD referenciada. En esta tabla se realizaraá las operaciones de transacciones de datos. Se guardarán, modificarán o borrarán registros según la lógica de negocio de la aplicación.
discriminator-value : Permite diferenciar dos sub-clases. Utilizado para el polimorfismo.
proxy : Nombre de la clase Proxy cuando esta sea requerida.,[object Object]
column: Columna en la tabla.
type: Indica el tipo de los datos almacenados.6 Tipos de relaciones.(Componentes y Colecciones) En todo diseño relacional los objetos se referencian unos a otros a través de relaciones, las típicas son : uno a uno 1-1, uno a muchos 1-n, muchos a muchos n-m, muchos a uno n-1. De los cuatro tipos, dos de ellas n-m y 1-n son colecciones de objetos las cuales tendrán su propio y extenso apartado, mientras que a las relaciones 1-1 y n-1 son en realidad componentes de un objeto persistente cuyo tipo es otro objeto persistente.
Estructura del archivo de configuración Esquema general de un fichero XML de configuración es algo como esto:  <Encabezado XML>        <Declaración de la DTD>               < hibernate-configuration - Definición de la configuración>                    <session-factory – parámetros de configuración> 	         <property – especificación de los parámetros de configuración> 	         <mapping - especificación de los archivos de mapeo>
Estructura del archivo de configuración <?xmlversion="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>   <session-factory>     <property name="hibernate.dialect"> org.hibernate.dialect.MySQLDialect     </property>     <property name="hibernate.connection.driver_class"> com.mysql.jdbc.Driver     </property>     <property name="hibernate.connection.url"> jdbc:mysql://localhost:3306/base_de_datos     </property>     <property name="hibernate.connection.username">root</property>     <property name="hibernate.connection.password">123456</property>     <mapping resource="mx/model/persistance/Empleado.hbm.xml"/>   </session-factory> </hibernate-configuration>
Configuración de la API  En cualquier aplicación que use Hibernate aparecen cuatro objetos básicos: Configuration: es el objeto que contiene la información necesaria para conectarse a la base de datos. Es el encargado de leerse el archivo. Hibernate.properties o 	Hibernate.cfg.xmlTambién es el encargado de procesar la información correspondiente a los aparejamientos. Es el encargado de leerse y verificar los archivos de emparejamiento nombreDeClasse.hbm.xml. Configuration cfg = new Configuration(); cfg.configure(RUTA_ARCHIVO_CONF); //agrega do clases dinamicamente Cfg.addClass(MiClase.Class);
Configuración de la API  SessionFactory: es una fábrica de Sessions. Un objeto Configuration es capaz de crear una SessionFactory ya que tiene toda la información necesaria.Normalmente, una aplicación sólo tiene una SessionFactory. 	A partir del hibernate.cfg.xml podemos crear un SessionFactory, que es el objeto mediante el cual abrimos nuevas sesiones de Hibernate. SessionFactory sessionFactory = cfg.buildSessionFactory();

Más contenido relacionado

La actualidad más candente

Spring Boot
Spring BootSpring Boot
Spring Boot
Pei-Tang Huang
 
Progressive Web App
Progressive Web AppProgressive Web App
Progressive Web App
SaleemMalik52
 
Spring Boot in Action
Spring Boot in Action Spring Boot in Action
Spring Boot in Action
Alex Movila
 
Java EE Introduction
Java EE IntroductionJava EE Introduction
Java EE Introduction
ejlp12
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with Spring
Joshua Long
 
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
Ji-Woong Choi
 
Basic Concept of Node.js & NPM
Basic Concept of Node.js & NPMBasic Concept of Node.js & NPM
Basic Concept of Node.js & NPM
Bhargav Anadkat
 
Openstack live migration
Openstack live migrationOpenstack live migration
Openstack live migration
ymtech
 
CommitConf 2023 - Spring Framework 6 y Spring Boot 3
CommitConf 2023 - Spring Framework 6 y Spring Boot 3CommitConf 2023 - Spring Framework 6 y Spring Boot 3
CommitConf 2023 - Spring Framework 6 y Spring Boot 3
Iván López Martín
 
WebLogic Deployment Plan Example
WebLogic Deployment Plan ExampleWebLogic Deployment Plan Example
WebLogic Deployment Plan Example
James Bayer
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
태준 문
 
Ansible, best practices
Ansible, best practicesAnsible, best practices
Ansible, best practices
Bas Meijer
 
Introduction to Progressive Web App
Introduction to Progressive Web AppIntroduction to Progressive Web App
Introduction to Progressive Web App
Binh Bui
 
Java DataBase Connectivity API (JDBC API)
Java DataBase Connectivity API (JDBC API)Java DataBase Connectivity API (JDBC API)
Java DataBase Connectivity API (JDBC API)
Luzan Baral
 
Introduction to ansible
Introduction to ansibleIntroduction to ansible
Introduction to ansible
Omid Vahdaty
 
02.실전! 시스템 관리자를 위한 Ansible
02.실전! 시스템 관리자를 위한 Ansible02.실전! 시스템 관리자를 위한 Ansible
02.실전! 시스템 관리자를 위한 Ansible
Opennaru, inc.
 
[IMQA] performance consulting
[IMQA] performance consulting[IMQA] performance consulting
[IMQA] performance consulting
IMQA
 
JAVA INTRODUCTION - 1
JAVA INTRODUCTION - 1JAVA INTRODUCTION - 1
JAVA INTRODUCTION - 1
Infoviaan Technologies
 
UDA-Guia desarrollo web services
UDA-Guia desarrollo web servicesUDA-Guia desarrollo web services
UDA-Guia desarrollo web services
Ander Martinez
 
Introduction to ASP.NET Core
Introduction to ASP.NET CoreIntroduction to ASP.NET Core
Introduction to ASP.NET Core
Avanade Nederland
 

La actualidad más candente (20)

Spring Boot
Spring BootSpring Boot
Spring Boot
 
Progressive Web App
Progressive Web AppProgressive Web App
Progressive Web App
 
Spring Boot in Action
Spring Boot in Action Spring Boot in Action
Spring Boot in Action
 
Java EE Introduction
Java EE IntroductionJava EE Introduction
Java EE Introduction
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with Spring
 
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
 
Basic Concept of Node.js & NPM
Basic Concept of Node.js & NPMBasic Concept of Node.js & NPM
Basic Concept of Node.js & NPM
 
Openstack live migration
Openstack live migrationOpenstack live migration
Openstack live migration
 
CommitConf 2023 - Spring Framework 6 y Spring Boot 3
CommitConf 2023 - Spring Framework 6 y Spring Boot 3CommitConf 2023 - Spring Framework 6 y Spring Boot 3
CommitConf 2023 - Spring Framework 6 y Spring Boot 3
 
WebLogic Deployment Plan Example
WebLogic Deployment Plan ExampleWebLogic Deployment Plan Example
WebLogic Deployment Plan Example
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
 
Ansible, best practices
Ansible, best practicesAnsible, best practices
Ansible, best practices
 
Introduction to Progressive Web App
Introduction to Progressive Web AppIntroduction to Progressive Web App
Introduction to Progressive Web App
 
Java DataBase Connectivity API (JDBC API)
Java DataBase Connectivity API (JDBC API)Java DataBase Connectivity API (JDBC API)
Java DataBase Connectivity API (JDBC API)
 
Introduction to ansible
Introduction to ansibleIntroduction to ansible
Introduction to ansible
 
02.실전! 시스템 관리자를 위한 Ansible
02.실전! 시스템 관리자를 위한 Ansible02.실전! 시스템 관리자를 위한 Ansible
02.실전! 시스템 관리자를 위한 Ansible
 
[IMQA] performance consulting
[IMQA] performance consulting[IMQA] performance consulting
[IMQA] performance consulting
 
JAVA INTRODUCTION - 1
JAVA INTRODUCTION - 1JAVA INTRODUCTION - 1
JAVA INTRODUCTION - 1
 
UDA-Guia desarrollo web services
UDA-Guia desarrollo web servicesUDA-Guia desarrollo web services
UDA-Guia desarrollo web services
 
Introduction to ASP.NET Core
Introduction to ASP.NET CoreIntroduction to ASP.NET Core
Introduction to ASP.NET Core
 

Destacado

Persistencia de datos en Java
Persistencia de datos en JavaPersistencia de datos en Java
Persistencia de datos en Java
Iker Canarias
 
Hibernate 3.2 short manual
Hibernate 3.2 short manualHibernate 3.2 short manual
Hibernate 3.2 short manual
Emmerson Miranda
 
Introducción a ORMs
Introducción a ORMsIntroducción a ORMs
Introducción a ORMs
maxfontana90
 
Hibernate
HibernateHibernate
Hibernate
Oliver Centeno
 
Building a Testable Data Access Layer
Building a Testable Data Access LayerBuilding a Testable Data Access Layer
Building a Testable Data Access Layer
Todd Anglin
 
Microsoft Data Access Technologies
Microsoft Data Access TechnologiesMicrosoft Data Access Technologies
Microsoft Data Access Technologies
David Chou
 
Hibernate - JPA @luce 5
Hibernate - JPA @luce 5Hibernate - JPA @luce 5
Hibernate - JPA @luce 5
Javier Gamarra
 
Delegation
DelegationDelegation
Delegation
Mauro Gomez Mejia
 
J2ee (java ee) design patterns and architecture
J2ee (java ee) design patterns and architectureJ2ee (java ee) design patterns and architecture
J2ee (java ee) design patterns and architecture
inTwentyEight Minutes
 
Bases de Datos en Java - Intro a Hibernate
Bases de Datos en Java - Intro a HibernateBases de Datos en Java - Intro a Hibernate
Bases de Datos en Java - Intro a Hibernate
Carlos Hernando
 
JPA en Netbeans
JPA en NetbeansJPA en Netbeans
JPA en Netbeans
Ronald Cuello
 
Javantura v4 - Security architecture of the Java platform - Martin Toshev
Javantura v4 - Security architecture of the Java platform - Martin ToshevJavantura v4 - Security architecture of the Java platform - Martin Toshev
Javantura v4 - Security architecture of the Java platform - Martin Toshev
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSDarwin Durand
 

Destacado (14)

Persistencia de datos en Java
Persistencia de datos en JavaPersistencia de datos en Java
Persistencia de datos en Java
 
Hibernate 3.2 short manual
Hibernate 3.2 short manualHibernate 3.2 short manual
Hibernate 3.2 short manual
 
Introducción a ORMs
Introducción a ORMsIntroducción a ORMs
Introducción a ORMs
 
Hibernate
HibernateHibernate
Hibernate
 
Building a Testable Data Access Layer
Building a Testable Data Access LayerBuilding a Testable Data Access Layer
Building a Testable Data Access Layer
 
Microsoft Data Access Technologies
Microsoft Data Access TechnologiesMicrosoft Data Access Technologies
Microsoft Data Access Technologies
 
Hibernate - JPA @luce 5
Hibernate - JPA @luce 5Hibernate - JPA @luce 5
Hibernate - JPA @luce 5
 
Delegation
DelegationDelegation
Delegation
 
J2ee (java ee) design patterns and architecture
J2ee (java ee) design patterns and architectureJ2ee (java ee) design patterns and architecture
J2ee (java ee) design patterns and architecture
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Bases de Datos en Java - Intro a Hibernate
Bases de Datos en Java - Intro a HibernateBases de Datos en Java - Intro a Hibernate
Bases de Datos en Java - Intro a Hibernate
 
JPA en Netbeans
JPA en NetbeansJPA en Netbeans
JPA en Netbeans
 
Javantura v4 - Security architecture of the Java platform - Martin Toshev
Javantura v4 - Security architecture of the Java platform - Martin ToshevJavantura v4 - Security architecture of the Java platform - Martin Toshev
Javantura v4 - Security architecture of the Java platform - Martin Toshev
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOS
 

Similar a Persistencia de objetos con Hibernate

Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Ronald Cuello
 
Persistencia de un modelo de objetos
Persistencia de un modelo de objetosPersistencia de un modelo de objetos
Persistencia de un modelo de objetos
Jorge Ercoli
 
Ead aplicaciones prácticas
Ead aplicaciones prácticasEad aplicaciones prácticas
Ead aplicaciones prácticas
Philippe-Jean Bunau-Varilla
 
Glosario base de datos Jeison Cruz
Glosario base de datos Jeison CruzGlosario base de datos Jeison Cruz
Glosario base de datos Jeison Cruz
Jeison Cruz
 
Glosario base de datos jeison cruz
Glosario base de datos jeison cruzGlosario base de datos jeison cruz
Glosario base de datos jeison cruz
Jeison Cruz
 
Jean piere sarumo mongodb
Jean piere sarumo mongodbJean piere sarumo mongodb
Jean piere sarumo mongodbJean Sarumo
 
Base de datos objeto
Base de datos objetoBase de datos objeto
Base de datos objetoRaul Quispe P
 
Bases De Datos Orientadas A Objetos2
Bases De Datos Orientadas A Objetos2Bases De Datos Orientadas A Objetos2
Bases De Datos Orientadas A Objetos2Cristina Huerta
 
Modelo de datos.
Modelo de datos.Modelo de datos.
Modelo de datos.
omarzon
 
Motor de persistencia nhibernate
Motor de persistencia nhibernateMotor de persistencia nhibernate
Motor de persistencia nhibernate
Damian Palacios
 
Fundamentos de los Gestores de Bases de Datos
Fundamentos de los Gestores de Bases de DatosFundamentos de los Gestores de Bases de Datos
Fundamentos de los Gestores de Bases de Datos
Manuel Picazo
 
Introduccion a Doctrine 2 ORM
Introduccion a Doctrine 2 ORMIntroduccion a Doctrine 2 ORM
Introduccion a Doctrine 2 ORM
Juan Ramón Laguardia
 
Algoritmos Computacionales II.docx
Algoritmos Computacionales II.docxAlgoritmos Computacionales II.docx
Algoritmos Computacionales II.docx
dhanibelreyes
 
Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......
SaulSalinasNeri
 
Bases de Datos Relacionales
Bases de Datos RelacionalesBases de Datos Relacionales
Bases de Datos RelacionalesArnulfo Gomez
 
Orm presentación final
Orm presentación finalOrm presentación final
Orm presentación final
Helenio Corvacho
 
Administración y programación en sql server
Administración y programación en sql serverAdministración y programación en sql server
Administración y programación en sql server
Isabel_Samir
 

Similar a Persistencia de objetos con Hibernate (20)

Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)
 
Persistencia de un modelo de objetos
Persistencia de un modelo de objetosPersistencia de un modelo de objetos
Persistencia de un modelo de objetos
 
Ead aplicaciones prácticas
Ead aplicaciones prácticasEad aplicaciones prácticas
Ead aplicaciones prácticas
 
Glosario base de datos Jeison Cruz
Glosario base de datos Jeison CruzGlosario base de datos Jeison Cruz
Glosario base de datos Jeison Cruz
 
Glosario base de datos jeison cruz
Glosario base de datos jeison cruzGlosario base de datos jeison cruz
Glosario base de datos jeison cruz
 
Jean piere sarumo mongodb
Jean piere sarumo mongodbJean piere sarumo mongodb
Jean piere sarumo mongodb
 
Base de datos objeto
Base de datos objetoBase de datos objeto
Base de datos objeto
 
Bases De Datos Orientadas A Objetos2
Bases De Datos Orientadas A Objetos2Bases De Datos Orientadas A Objetos2
Bases De Datos Orientadas A Objetos2
 
Modelo de datos.
Modelo de datos.Modelo de datos.
Modelo de datos.
 
Motor de persistencia nhibernate
Motor de persistencia nhibernateMotor de persistencia nhibernate
Motor de persistencia nhibernate
 
Fundamentos de los Gestores de Bases de Datos
Fundamentos de los Gestores de Bases de DatosFundamentos de los Gestores de Bases de Datos
Fundamentos de los Gestores de Bases de Datos
 
Sesion03 apuntes
Sesion03 apuntesSesion03 apuntes
Sesion03 apuntes
 
Introduccion a Doctrine 2 ORM
Introduccion a Doctrine 2 ORMIntroduccion a Doctrine 2 ORM
Introduccion a Doctrine 2 ORM
 
Base de datos1024
Base de datos1024Base de datos1024
Base de datos1024
 
Algoritmos Computacionales II.docx
Algoritmos Computacionales II.docxAlgoritmos Computacionales II.docx
Algoritmos Computacionales II.docx
 
Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......
 
Bases de Datos Relacionales
Bases de Datos RelacionalesBases de Datos Relacionales
Bases de Datos Relacionales
 
Orm presentación final
Orm presentación finalOrm presentación final
Orm presentación final
 
Administración y programación en sql server
Administración y programación en sql serverAdministración y programación en sql server
Administración y programación en sql server
 
Tsql
TsqlTsql
Tsql
 

Más de Mauro Gomez Mejia

Container
ContainerContainer
Interface
InterfaceInterface
Polimorfismo (Clases Abstractas)
Polimorfismo (Clases Abstractas)Polimorfismo (Clases Abstractas)
Polimorfismo (Clases Abstractas)
Mauro Gomez Mejia
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
Mauro Gomez Mejia
 
2011 horizon-report
2011 horizon-report2011 horizon-report
2011 horizon-report
Mauro Gomez Mejia
 
Orm
OrmOrm
MVC
MVCMVC
2010 horizon-report
2010 horizon-report2010 horizon-report
2010 horizon-report
Mauro Gomez Mejia
 
Sql injection
Sql injectionSql injection
Sql injection
Mauro Gomez Mejia
 
Jquery para principianes
Jquery para principianesJquery para principianes
Jquery para principianes
Mauro Gomez Mejia
 
Comunicacion Java Envio De Datos Al Puerto Paralelo
Comunicacion Java Envio De Datos Al Puerto ParaleloComunicacion Java Envio De Datos Al Puerto Paralelo
Comunicacion Java Envio De Datos Al Puerto Paralelo
Mauro Gomez Mejia
 
Cuadrados Mágicos De Orden Impar
Cuadrados Mágicos De Orden ImparCuadrados Mágicos De Orden Impar
Cuadrados Mágicos De Orden Impar
Mauro Gomez Mejia
 
Redes De Computadores
Redes De ComputadoresRedes De Computadores
Redes De Computadores
Mauro Gomez Mejia
 
Java Mail
Java MailJava Mail
Java A Tope J2 Me (Java 2 Micro Edition)
Java A Tope  J2 Me (Java 2 Micro Edition)Java A Tope  J2 Me (Java 2 Micro Edition)
Java A Tope J2 Me (Java 2 Micro Edition)
Mauro Gomez Mejia
 

Más de Mauro Gomez Mejia (20)

Container
ContainerContainer
Container
 
Interface
InterfaceInterface
Interface
 
Encapsulamiento
EncapsulamientoEncapsulamiento
Encapsulamiento
 
Polimorfismo (Clases Abstractas)
Polimorfismo (Clases Abstractas)Polimorfismo (Clases Abstractas)
Polimorfismo (Clases Abstractas)
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
2011 horizon-report
2011 horizon-report2011 horizon-report
2011 horizon-report
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
My batis
My batisMy batis
My batis
 
Orm
OrmOrm
Orm
 
MVC
MVCMVC
MVC
 
2010 horizon-report
2010 horizon-report2010 horizon-report
2010 horizon-report
 
Sql injection
Sql injectionSql injection
Sql injection
 
J M E R L I N P H P
J M E R L I N P H PJ M E R L I N P H P
J M E R L I N P H P
 
Jquery para principianes
Jquery para principianesJquery para principianes
Jquery para principianes
 
Jmerlin php
Jmerlin phpJmerlin php
Jmerlin php
 
Comunicacion Java Envio De Datos Al Puerto Paralelo
Comunicacion Java Envio De Datos Al Puerto ParaleloComunicacion Java Envio De Datos Al Puerto Paralelo
Comunicacion Java Envio De Datos Al Puerto Paralelo
 
Cuadrados Mágicos De Orden Impar
Cuadrados Mágicos De Orden ImparCuadrados Mágicos De Orden Impar
Cuadrados Mágicos De Orden Impar
 
Redes De Computadores
Redes De ComputadoresRedes De Computadores
Redes De Computadores
 
Java Mail
Java MailJava Mail
Java Mail
 
Java A Tope J2 Me (Java 2 Micro Edition)
Java A Tope  J2 Me (Java 2 Micro Edition)Java A Tope  J2 Me (Java 2 Micro Edition)
Java A Tope J2 Me (Java 2 Micro Edition)
 

Persistencia de objetos con Hibernate

  • 1. Persistencia de Objetos Ing. Ronald Cuello Meza
  • 2. Que es un ORM Es una técnica de programación para convertir datos entre el sistema de tipos utilizado en un lenguaje de programación orientado a objetos y el utilizado en una base de datos relacional. En la práctica esto crea una base de datos orientada a objetos virtual, por sobre la base de datos relacional. Esto posibilita el uso de las características propias de la orientación a objetos (básicamente herencia y polimorfismo). Hay paquetes comerciales y de uso libre disponibles que desarrollan el mapeo relacional de objetos, aunque algunos programadores prefieren crear sus propias herramientas ORM. (Fuente Wikipedia)
  • 3.
  • 4. Trabajar con las clases diseñadas en su modelo del dominio
  • 5. Permite elegir la base de datos relacional con la que queramos interactuar (SQLServer,PostGreSQL,MySQL,Oracle…)
  • 6. Genera automáticamente el código SQL usando un mapeo objeto-relacional ,el cual se especifica en un documento XML o anotaciones
  • 7.
  • 11. Java Data Objects (JDO)
  • 16. Linq
  • 19.
  • 20. Bajo acoplamiento entre negocios y persistencia
  • 21.
  • 22. Que es Hibernate Es una herramienta de Mapeo objeto-relacional para la plataforma Java que facilita el mapeo de atributos entre una base de datos relacional tradicional y el modelo de objetos de una aplicación, mediante archivos declarativos (XML) que permiten establecer estas relaciones. Usa el mecanismo de reflexión de Java, que permite a un objeto en ejecución examinarse y manipularse a sí mismo.
  • 23.
  • 24. Buena documentación y comunidad amplia y activa
  • 26. Potente lenguaje de consulta (HQL) ,subqueries,outer joins,ordering,paginacion,etc
  • 28. Cada clase persistente necesita un fichero XML de mapeo del que obtiene toda la información para realizar las operaciones CRUD
  • 29.
  • 30. Hibernate Vs JDBC ¿Cuál es la gran diferencia entre el código tradicional JDBC y el código que escribimos con Hibernate? “Ha desparecido el SQL”. Lo único que digo es que quiero “guardar” (save) un objeto.
  • 31. Dialectos de Hibernate Hibernate soporta, actualmente, los siguientes dialectos:
  • 32. Ejemplo Diagrama de entidad relación.
  • 34. Que se necesita Una serie de JavaBeans que son las clases a persistir Un archivo XML por cada una de estas clases (MiClase.hbm.xml) que indica el mapping entre objetos y relaciones Crear/Configurar el archivo del framework hibernate.cfg.xml
  • 35. Configurar JavaBean Este sería el aspecto del JavaBean que representa un Empleado en una supuesta aplicación: packagemx.model; public class Empleado implementsSerializable{ private Long id; privateString nombre; privateString apellido; // SettersGetters …. }
  • 36. Estructura del fichero XML Esquema general de un fichero XML de mapeo es algo como esto: <Encabezado XML> <Declaración de la DTD> <class - Definición de la clase persistente> <id - Identificador> <generator - Clase de apoyo a la generación automática de OID's> <property – propiedades de la clase> <!--***************Asociaciones *************** --> <!--Posibles relaciones con otras entidades persistentes--> <one-to-many > <many-to-many> <many-to-one> 1 2 3 4 5 6
  • 37. Estructura del fichero XML <?xmlversion="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="mx.model.Empleado" table="empleados"> <id name="id" column="id"> <generator class="native"/> </id> <property name="nombre" column="nombre" /> <property name="apellido" column="apellido" /> </class> </hibernate-mapping>
  • 38.
  • 39. table: Nombre de la tabla en la BBDD referenciada. En esta tabla se realizaraá las operaciones de transacciones de datos. Se guardarán, modificarán o borrarán registros según la lógica de negocio de la aplicación.
  • 40. discriminator-value : Permite diferenciar dos sub-clases. Utilizado para el polimorfismo.
  • 41.
  • 42. column: Columna en la tabla.
  • 43. type: Indica el tipo de los datos almacenados.6 Tipos de relaciones.(Componentes y Colecciones) En todo diseño relacional los objetos se referencian unos a otros a través de relaciones, las típicas son : uno a uno 1-1, uno a muchos 1-n, muchos a muchos n-m, muchos a uno n-1. De los cuatro tipos, dos de ellas n-m y 1-n son colecciones de objetos las cuales tendrán su propio y extenso apartado, mientras que a las relaciones 1-1 y n-1 son en realidad componentes de un objeto persistente cuyo tipo es otro objeto persistente.
  • 44. Estructura del archivo de configuración Esquema general de un fichero XML de configuración es algo como esto: <Encabezado XML> <Declaración de la DTD> < hibernate-configuration - Definición de la configuración> <session-factory – parámetros de configuración> <property – especificación de los parámetros de configuración> <mapping - especificación de los archivos de mapeo>
  • 45. Estructura del archivo de configuración <?xmlversion="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="hibernate.connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="hibernate.connection.url"> jdbc:mysql://localhost:3306/base_de_datos </property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123456</property> <mapping resource="mx/model/persistance/Empleado.hbm.xml"/> </session-factory> </hibernate-configuration>
  • 46. Configuración de la API En cualquier aplicación que use Hibernate aparecen cuatro objetos básicos: Configuration: es el objeto que contiene la información necesaria para conectarse a la base de datos. Es el encargado de leerse el archivo. Hibernate.properties o Hibernate.cfg.xmlTambién es el encargado de procesar la información correspondiente a los aparejamientos. Es el encargado de leerse y verificar los archivos de emparejamiento nombreDeClasse.hbm.xml. Configuration cfg = new Configuration(); cfg.configure(RUTA_ARCHIVO_CONF); //agrega do clases dinamicamente Cfg.addClass(MiClase.Class);
  • 47. Configuración de la API SessionFactory: es una fábrica de Sessions. Un objeto Configuration es capaz de crear una SessionFactory ya que tiene toda la información necesaria.Normalmente, una aplicación sólo tiene una SessionFactory. A partir del hibernate.cfg.xml podemos crear un SessionFactory, que es el objeto mediante el cual abrimos nuevas sesiones de Hibernate. SessionFactory sessionFactory = cfg.buildSessionFactory();
  • 48.
  • 49.
  • 50. Esquema de Configuración - Hibernate.properties - Hibernate.cfg.xml - MiClase.hbm.xml - addClass Configuration Base de Datos SessionFactory Session Session Save – Update – Delete – get -load Commit RollBack BeginTransacction
  • 51. Configuración de la API Para insertar objetos en la BBDD usaremos el método save(Object objeto) de Session, para insertar o actualizar si ya existe saveOrUpdate(Object objeto), para borrar delete(Object objeto) y para cargar un objeto desde la BBDD get(String clase, Tipo id) o load(String clase, Tipo id) que devuelven el objeto de la clase indicada por el primer parámetro y con identificador el segundo parámetro si es que existe en la BBDD. Para hacer búsquedas en la base de datos podemos usar find(String consulta) que devuelve una lista con los resultados, o iterate(String consulta) que devuelve un iterador, o bien crear un objeto Query usando createQuery(String consulta) y llamar más tarde al método find() del Query. La consulta en todos los casos estará escrita en un lenguaje similar a SQL propio de Hibernate llamado HQL (HibernateQueryLanguage)
  • 52. Programando la API public class HibernateUtil { privatestatic final SessionFactory sessionFactory; static { try { // Createthe SessionFactory fromstandard (hibernate.cfg.xml) // configfile. Stringpath="mx/model/persistance/hibernate.cfg.xml"; Configuration cf=new Configuration(); cf.addFile(path); sessionFactory=cf.buildSessionFactory(); } catch (Throwable ex) { // Log theexception. System.err.println("Initial SessionFactory creationfailed." + ex); throw new ExceptionInInitializerError(ex); } } publicstatic SessionFactory getSessionFactory() { returnsessionFactory; } }
  • 53. Creación de CRUD publicstaticListfindAll(){ Session session=HibernateUtil.getSessionFactory().openSession(); Query q=session.createQuery("From Empleado e"); returnq.list(); } publicstatic Empleado findById(Long id){ Session s=HibernateUtil.getSessionFactory().openSession(); return (Empleado)s.get(Empleado.class, id); } publicstaticvoidsave(Empleado e){ Session s=HibernateUtil.getSessionFactory().openSession(); s.getTransaction().begin(); try{ s.persist(e); s.getTransaction().commit(); }catch(Exceptionexc){ s.getTransaction().rollback(); exc.printStackTrace(); }
  • 54.
  • 55. table: Nombre de la tabla de la colección.
  • 56. lazy ("true"|"false"): Permite el uso de inicialización "lazy". Este tipo de inicialización hace que los objetos de la colección sean solicitados en demanda y no se carguen todos a la vez. Esto es especialmente útil para optimizar búsquedas, etc...
  • 57. inverse: Señala esta colección como el fin de una asociación bidireccional. Utilizada en relaciones many-to-many sobre todo.
  • 58. cascade: Permite las operaciones en cascada hacia las entidades hijas.
  • 59. sort: Especifica una colección con una ordenación natural o con una clase comparadora dada.
  • 60.
  • 61. Colecciones (Asociaciones) 1 <one-to-one> ( 1 - 1) Si la clase B no posee la misma id del padre, se generará un error de ejecución. Mapping Departamento: <class name=“Departamento" table=“departamentos">   <one-to-one name=“coordinador" class="mx.model.Empleado" /></class> Mapping Empleado: <class name=“Empleado" table=“empleados">   <one-to-one name=“departamento" class="mx.model.Departamento" /></class>
  • 62. Colecciones (Asociaciones) 2 <many-to-one> ( 1 - 1) Definición: En esta relación se maneja de la siguiente forma, una llave foránea en una tabla esta referenciando la llave primaria de otra tabla Escenario: Tenemos 2 clases ,Empleado y Departamento relacionados de la siguiente manera: Empleado Departamento.getCoordinador() //retorna Empleado Hibernate – Mapping: <class name=“Departamento" table=“departamentos">   <many-to-one name="coordinador" column="fk_coordinador" class="mx.model.Empleado"/></class>
  • 63. Colecciones (Asociaciones) 3 <one-to-many> ( 1 - *) Definición: La Clase A debe tener una colección que referencie a la Clase B Escenario: Tenemos 2 clases ,Empleado y Departamento relacionados de la siguiente manera: Set Empleado.getDepartamentos() //retorna Colección de instancias de Departamento Hibernate – Mapping: <class name=“Empleado" table=“empleados">    <set name="departamentos" table="departamentos"> <key column="fk_coordinador"/> <one-to-many class="mx.model.Departamento"/> </set></class>
  • 64. Colecciones (Asociaciones) 4 <many-to-many> ( n - m) Definición: Relación de muchos a muchos donde la clase A posee una colección que referencia a B,como la relación oneToMany,pero B puede tener múltiples A. Escenario: Tenemos 2 clases ,Empleado y Cargo relacionados de la siguiente manera: Set<Cargo>Empleado.getCargos() //retorna colección de instancias de Cargo Hibernate – Mapping: <class name=“Empleado" table=“empleados"> <set name="cargos" table="empleado_cargos"> <key column="fk_empleado"/> <many-to-many class="mx.model.Cargo" column="fk_cargo" /> </set> </class>
  • 65. Hibernate Query Language (HQL) El HQL (HibernateQueryLanguage) es un lenguaje de consulta. En el mundo relacional disponemos del SQL (StructuredQueryLanguage) que nos permite obtener información haciendo preguntas basadas en las tablas y sus columnas. El equivalente en el mundo objetual es el HQL, que nos permite hacer preguntas basadas en los objetos y sus propiedades. Una vez más, Hibernate se encarga de unir los dos mundos. Traduce las consultas que hacemos desde el mundo objetual en HQL al lenguaje de consulta del mundo relacional, el SQL, y transforma los resultados obtenidos en el mundo relacional (filas y columnas) en aquello que tiene sentido en el mundo objetual: objetos.
  • 66. Hibernate Query Language (HQL) El concepto de “traducción” es importante para entender qué hace Hibernate y uno de los sentidos de HQL. Hemos visto más arriba la equivalencia entre una consulta SQL y una en HQL. Así, la consulta FROM Empleado e WHERE e.id = 1 se podría “traducir” a SELECT ID, NOMBRE, APELLIDOS FROM empleados WHERE id = 1 y la consulta FROM Empledo e WHERE e.nombre = ‘Ronald‘ se podría “traducir” a SELECT ID, NOMBRE, APELLIDOS FROM Empleados e WHERE e.NOMBRE = ‘Ronald’
  • 67. HibernateQueryLanguage (HQL) Clausulas : FROM Existen varias formas de simplificar una clase a la hora de realizar la consulta hql> FROM mx.model.Empleado hql> FROM Empleado Dando como resultado una colección de objetos de tipo Empleado SELECT la clausula SELECT selecciona cual(es) objeto (s)y cual (es) propiedad(es) se retornara en el resultado del query. hql> SELECT v.marca FROM Vehiculo as v hql> SELECT v.marca FROM Vehiculo v WHERE v.marcalike ‘toy%’ hql> SELECT user.persona.nombre FROM Usuario user hql> SELECT user.username,p.nombre FROM Usuario user,Persona p La anterior consulta nos retorna Object[ ] WHERE Ayuda a filtrar la lista de instancias retornadas. hql> FROM Usuario user WHERE user.username = ‘rcuello’ hql> FROM Usuario user WHERE user.persona.cedula=123456 hql> FROM Usuario user WHERE username.username IS NOT NULL
  • 68. HibernateQueryLanguage (HQL) ORDER BY La lista retornada por una consulta puede ser ordenada por cualquier propiedad de un objeto. hql> FROM Empleado emp ORDER BY emp.nombreasc hql> FROM Usuario user ORDER BY user.persona.apellidodesc GROUP BY Def SQL :Combina los registros con valores idénticos, en la lista de campos especificados, en un único registro. Tabla. Tiendas_info Deseamos saber las ventas totales para cada negocio. Para hacerlo, ingresaríamos, SQL > SELECT tienda, SUM( ganancia ) FROM Tiendas_info GROUP BY tienda Dando como resultado
  • 69. HibernateQueryLanguage (HQL) GROUP BY hql> Selectt.tienda,SUM (t.ganancia) FromTiendaInfo t GROUP BY t.tienda El resultado de esta consulta es una Lista de Objects de tipo arreglo (Object[ ]) Ejemplo: Query q=session.createQuery(“Selectt.tienda,SUM (t.ganancia) FromTiendaInfo t GROUP BY t.tienda “); List lista =q.list(); For(Objectobj : lista){ Object[ ] listaObjetos=(Object[ ])obj; //donde la posicion 0 es igual a t.tienda //la posicion 1 es igual a SUM ( t.ganancia ) }
  • 70. Hibernate Query Language (HQL) FUNCIONES ESCALARES HQL nos permite usar funciones escalares en nuestras consultas. Y las soportadas son las siguientes : Todas tienen las mismas funcionalidades del SQL SELECT COUNT(*) FROM Empleado En nuestro ejemplo, no tenemos más números que los id de las clases, así que no puedo poner ejemplos demasiado interesantes ni prácticos de las funciones escalares, pero a guisa de ejemplo, podemos obtener la media de los id de Empleado: SELECT AVG(e.id) FROM Empleado e También los podemos sumar: SELECT SUM(e.id) FROM Empleado e O obtener los valores máximo y mínimo: SELECT MAX(e.id), MIN(e.id) FROM Empleado e
  • 71.
  • 81.
  • 85. Gracias por su atención