Bases de Datos en JAVA   Introducción a Hibernate                 Carlos Hernando Carasol                     chernando@ac...
Índice de contenidos Motivación de ORM Introducción y conf guración de Hibernate                   i Introducción a ORM Co...
Motivación de ORM
Problemas con JDBC Es muy artesanal No hay una relación directa entre modelo y persistencia Complica un diseño MVC El mant...
Acercando Objetos y Entidades Las entidades son atributos Los objetos tienen atributos y métodos Las entidades tienen rela...
ORMObject Relational Mapping“This creates, in effect, a "virtual objectdatabase" that can be used from withinthe programmi...
JPA Java Persistence API Def ne cómo persistir objetos   i Proporciona un diseño que desacopla el modelo de la persistencia
EJB3 Entorno JEE (Java Enterprise Edition) Def ne tres tipos:   i   Sesiones   Mensajes   Entidades   JPA
Hibernate Http://www.hibernate.org/ Software libre Implementación de referencia de JPA
Introducción y configuración de Hibernate
Arquitectura de Hibernate
Arquitectura de Hibernate
Hibernate en pocas palablas SessionFactory   Factoría de Session Session   Envuelve JDBC Connection   Factoría de Transact...
Añadir Hibernate al proyecto Añadir las librerías   Driver JDBC   Hibernate*.jar y dependencias Utilizar Hibernate Tools  ...
Configuración hibernate.cfg.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate...
Configuración de depuración<property name="hibernate.show_sql">true</property><property name="hibernate.format_sql">true</...
Creando una conexión// A SessionFactory is set up once for anapplicationsessionFactory = new Configuration().configure() /...
Ejercicio Crear un proyecto Añadir las librerías necesarias Incluir las librerías en el Build Path Crear un hibernate.cfg....
Introducción a ORM
Java Annotations Conocidos para documentación   @Author Apuntes para el compilador   @SuppressWarnings("unchecked")   @Ove...
Creando una entidad@Entity@Table(name = "country")public class Country implements java.io.Serializable {@Id@GeneratedValue...
Entity Def ne la clase como una entidad   i Es aconsejable que sea Serializable Es requisito que tenga un constructor vacío
Table Def ne la tabla dónde reside la entidad   i Propiedades:   name nombre de la tabla
Id Def ne el campo como clave   i Subrrogate keys Suele ir acompañado de @GeneratedValue
Column Def ne el nombre de la columna   i Añade restricciones   nullable   unique   length
Añadir la entidad a Hibernate En la conf guración de hibernate, añadir          i en mapping la clase.
Ejercicio Crear las clases:   Country   –   Id   –   country   City   –   Id   –   city Establecer los @Table y @Column
Consultas y persistencia
Consultar: createQuery Utilizamos createQuery Utiliza una sintaxis similar a SQL Normalmente la utilizamos para devolver o...
EjemploQuery query =session.createQuery("SELECT jFROM Jugador j");List<Jugador> result =query.list();
Ejercicio Listar el contenido de:   Country   City con el formato:   id: nombre
Crear datossession.beginTransaction();Jugador j = new Jugador();j.setNombre(“Carlos”);session.save(j);session.getTransacti...
Ejercicio Crear un país nuevo y guardarlo Probar a guardarlo sin las transacciones Crear una ciudad nueva y guardarla Comp...
Modificar datos  Con el objeto que nos interese:session.update(o);  Es útil el método uniqueResult()
Ejercicio Elegir un país y cambiarle el nombre Ejecutar una query que busque por el nombre, no el identif cador           ...
Eliminar datosdelete(o);
Ejercicio Eliminar el país que hemos creado antes Eliminar ciudades que empiecen por e
Asociaciones
Relaciones OneToMany Las bases de datos son relacionales Queremos que nuestros objetos mantengan la relación cuando persis...
Ejemplo de OneToMany  Lado One:@OneToMany(mappedBy="jugador")private List<Titulo> titulos = newArrayList<Titulo>();  Lado ...
Propiedades Para ambas anotaciones fetch  fetch=FetchType.EAGER cascade  cascade=CascadeType.ALL
@JoinColumn  No podemos utilizar @Column  Utilizamos @JoinColumn@JoinColumn(name="jugador_id")
Ejercicio: consultas y relaciones Establecer la relación entre City y Country Activar la depuración de SQL Escenario 1:   ...
Ejercicio: establecer relaciones Escenario 1:   Crear un país y guardar   Crear una ciudad y asignarle el país creado y   ...
Ejercicio: establecer relaciones Escenario 2:   Crear un país   Crear una ciudad y f jar el país anterior                 ...
Ejercicio: establecer relaciones Escenario 3   Crear un país   Crear una ciudad   Añadir la ciudad a la lista de ciudades ...
Caso práctico
Diseño orientativo
Ejercicio Utilizar el código del otro caso como base Plantear un buen diseño Proporcionar para las entidades:   Listado   ...
Ejercicio cont. Procedimiento TareaNotif cada, que                           i elimine la notif cación y muestre por      ...
Temas avanzados
Secuencias de modificaciónint n = session.createQuery("UPDATE Country set country = Zambia WHEREcountry = Carlos Landia")....
Otras asociaciones @OneToOne   En algunos casos se puede embeber @ManyToMany   Es necesario crear una tabla intermedia   @...
Generación de SQL Utilizamos hbm2ddl Se puede programar   Conf guration cfg = new        i   Conf guration().conf gure(); ...
Herencia Divergencias entre clase y tabla En objetos es bastante común En tablas no :) Hibernate permite herencias
Estrategias de herencia Una tabla por entidad   @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) Una tabla por fam...
Más cosas Entidades solo lectura Interceptores HQL Criteria Cache y optimización … http://docs.jboss.org/hibernate/core/3....
Upcoming SlideShare
Loading in...5
×

Bases de Datos en Java - Intro a Hibernate

8,979

Published on

Curso de introducción al uso de Hibernate para persistir objetos a bases de datos.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
8,979
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
263
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Bases de Datos en Java - Intro a Hibernate

  1. 1. Bases de Datos en JAVA Introducción a Hibernate Carlos Hernando Carasol chernando@acm.org 11 de Mayo de 2011
  2. 2. Índice de contenidos Motivación de ORM Introducción y conf guración de Hibernate i Introducción a ORM Consultas y persistencia Asociaciones Temas avanzados
  3. 3. Motivación de ORM
  4. 4. Problemas con JDBC Es muy artesanal No hay una relación directa entre modelo y persistencia Complica un diseño MVC El mantenimiento es costoso
  5. 5. Acercando Objetos y Entidades Las entidades son atributos Los objetos tienen atributos y métodos Las entidades tienen relaciones Los objetos son navegables ¿Cómo podemos tratarlos igual?
  6. 6. ORMObject Relational Mapping“This creates, in effect, a "virtual objectdatabase" that can be used from withinthe programming language.” WikipediaLos objetos pueden persistir en base dedatos de forma transparente para elprogramador
  7. 7. JPA Java Persistence API Def ne cómo persistir objetos i Proporciona un diseño que desacopla el modelo de la persistencia
  8. 8. EJB3 Entorno JEE (Java Enterprise Edition) Def ne tres tipos: i Sesiones Mensajes Entidades JPA
  9. 9. Hibernate Http://www.hibernate.org/ Software libre Implementación de referencia de JPA
  10. 10. Introducción y configuración de Hibernate
  11. 11. Arquitectura de Hibernate
  12. 12. Arquitectura de Hibernate
  13. 13. Hibernate en pocas palablas SessionFactory Factoría de Session Session Envuelve JDBC Connection Factoría de Transaction Persistencia de objetos y colecciones
  14. 14. Añadir Hibernate al proyecto Añadir las librerías Driver JDBC Hibernate*.jar y dependencias Utilizar Hibernate Tools http://www.hibernate.org/subprojects/tools.html
  15. 15. Configuración hibernate.cfg.xml<?xml version="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 name="SFactory"> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost/sakila</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> </session-factory></hibernate-configuration>
  16. 16. Configuración de depuración<property name="hibernate.show_sql">true</property><property name="hibernate.format_sql">true</property>
  17. 17. Creando una conexión// A SessionFactory is set up once for anapplicationsessionFactory = new Configuration().configure() // configures settings fromhibernate.cfg.xml.buildSessionFactory();
  18. 18. Ejercicio Crear un proyecto Añadir las librerías necesarias Incluir las librerías en el Build Path Crear un hibernate.cfg.xml con Tools Crear un SessionFactory
  19. 19. Introducción a ORM
  20. 20. Java Annotations Conocidos para documentación @Author Apuntes para el compilador @SuppressWarnings("unchecked") @Override Añaden funcionalidad
  21. 21. Creando una entidad@Entity@Table(name = "country")public class Country implements java.io.Serializable {@Id@GeneratedValue@Column(name = "country_id", unique = true, nullable = false)private Short countryId@Column(name = "country", nullable = false, length = 50)private String country;public Country() {}
  22. 22. Entity Def ne la clase como una entidad i Es aconsejable que sea Serializable Es requisito que tenga un constructor vacío
  23. 23. Table Def ne la tabla dónde reside la entidad i Propiedades: name nombre de la tabla
  24. 24. Id Def ne el campo como clave i Subrrogate keys Suele ir acompañado de @GeneratedValue
  25. 25. Column Def ne el nombre de la columna i Añade restricciones nullable unique length
  26. 26. Añadir la entidad a Hibernate En la conf guración de hibernate, añadir i en mapping la clase.
  27. 27. Ejercicio Crear las clases: Country – Id – country City – Id – city Establecer los @Table y @Column
  28. 28. Consultas y persistencia
  29. 29. Consultar: createQuery Utilizamos createQuery Utiliza una sintaxis similar a SQL Normalmente la utilizamos para devolver objetos Es útil el método list()
  30. 30. EjemploQuery query =session.createQuery("SELECT jFROM Jugador j");List<Jugador> result =query.list();
  31. 31. Ejercicio Listar el contenido de: Country City con el formato: id: nombre
  32. 32. Crear datossession.beginTransaction();Jugador j = new Jugador();j.setNombre(“Carlos”);session.save(j);session.getTransaction().close();
  33. 33. Ejercicio Crear un país nuevo y guardarlo Probar a guardarlo sin las transacciones Crear una ciudad nueva y guardarla Comprobar el estado de la base de datos
  34. 34. Modificar datos Con el objeto que nos interese:session.update(o); Es útil el método uniqueResult()
  35. 35. Ejercicio Elegir un país y cambiarle el nombre Ejecutar una query que busque por el nombre, no el identif cador i
  36. 36. Eliminar datosdelete(o);
  37. 37. Ejercicio Eliminar el país que hemos creado antes Eliminar ciudades que empiecen por e
  38. 38. Asociaciones
  39. 39. Relaciones OneToMany Las bases de datos son relacionales Queremos que nuestros objetos mantengan la relación cuando persistan Vamos a verlo bilateralmente
  40. 40. Ejemplo de OneToMany Lado One:@OneToMany(mappedBy="jugador")private List<Titulo> titulos = newArrayList<Titulo>(); Lado Many:@ManyToOneprivate Country country;
  41. 41. Propiedades Para ambas anotaciones fetch fetch=FetchType.EAGER cascade cascade=CascadeType.ALL
  42. 42. @JoinColumn No podemos utilizar @Column Utilizamos @JoinColumn@JoinColumn(name="jugador_id")
  43. 43. Ejercicio: consultas y relaciones Establecer la relación entre City y Country Activar la depuración de SQL Escenario 1: Sin i jar el fetch (LAZY) listar de al menos f dos países sus ciudades Escenario 2: Fijando el fetch a EAGER listar de al menos dos países sus ciudades
  44. 44. Ejercicio: establecer relaciones Escenario 1: Crear un país y guardar Crear una ciudad y asignarle el país creado y guardarlo Este escenario no debería daros problemas
  45. 45. Ejercicio: establecer relaciones Escenario 2: Crear un país Crear una ciudad y f jar el país anterior i Guardar ciudad Este escenario provoca un fallo al intentar relacionar un país que no está guardado Es necesario utilizar cascade
  46. 46. Ejercicio: establecer relaciones Escenario 3 Crear un país Crear una ciudad Añadir la ciudad a la lista de ciudades del país Guardar país Este escenario provoca el mismo error que antes Es necesario f jar el país en la ciudad i
  47. 47. Caso práctico
  48. 48. Diseño orientativo
  49. 49. Ejercicio Utilizar el código del otro caso como base Plantear un buen diseño Proporcionar para las entidades: Listado Creación y actualización de registros Eliminar un registro Listado de las vistas (o consultas directas) Un ejemplo como si se llamara desde UI
  50. 50. Ejercicio cont. Procedimiento TareaNotif cada, que i elimine la notif cación y muestre por i pantalla la información de la tarea Crear un OrganizarTareas(persona) que asigne las tareas un día detrás de otro Crear un ReasignarTarea(tarea, persona) que intente asignar la tarea a esa persona y falle en caso de que esa persona ya tenga algo el mismo día
  51. 51. Temas avanzados
  52. 52. Secuencias de modificaciónint n = session.createQuery("UPDATE Country set country = Zambia WHEREcountry = Carlos Landia").executeUpdate();
  53. 53. Otras asociaciones @OneToOne En algunos casos se puede embeber @ManyToMany Es necesario crear una tabla intermedia @JoinTable
  54. 54. Generación de SQL Utilizamos hbm2ddl Se puede programar Conf guration cfg = new i Conf guration().conf gure(); i i SchemaExport schemaExport = new SchemaExport(cfg); schemaExport.create(false, true); Se puede añadir a la conf guración i hibernate.hbm2ddl.auto=create
  55. 55. Herencia Divergencias entre clase y tabla En objetos es bastante común En tablas no :) Hibernate permite herencias
  56. 56. Estrategias de herencia Una tabla por entidad @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) Una tabla por familia de clases @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn( name = "BILLING_DETAILS_TYPE", discriminatorType = DiscriminatorType.STRING) @DiscriminatorValue(“CCC”) Una tabla por subclase @Inheritance(strategy = InheritanceType.JOINED)
  57. 57. Más cosas Entidades solo lectura Interceptores HQL Criteria Cache y optimización … http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×