Bases de Datos en Java - Intro a Hibernate
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Bases de Datos en Java - Intro a Hibernate

on

  • 9,132 views

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

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

Statistics

Views

Total Views
9,132
Views on SlideShare
9,129
Embed Views
3

Actions

Likes
1
Downloads
241
Comments
0

3 Embeds 3

http://localhost 1
http://www.linkedin.com 1
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Bases de Datos en Java - Intro a Hibernate Presentation Transcript

  • 1. Bases de Datos en JAVA Introducción a Hibernate Carlos Hernando Carasol chernando@acm.org 11 de Mayo de 2011
  • 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. Motivación de ORM
  • 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. 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. 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. JPA Java Persistence API Def ne cómo persistir objetos i Proporciona un diseño que desacopla el modelo de la persistencia
  • 8. EJB3 Entorno JEE (Java Enterprise Edition) Def ne tres tipos: i Sesiones Mensajes Entidades JPA
  • 9. Hibernate Http://www.hibernate.org/ Software libre Implementación de referencia de JPA
  • 10. Introducción y configuración de Hibernate
  • 11. Arquitectura de Hibernate
  • 12. Arquitectura de Hibernate
  • 13. Hibernate en pocas palablas SessionFactory Factoría de Session Session Envuelve JDBC Connection Factoría de Transaction Persistencia de objetos y colecciones
  • 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. 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. Configuración de depuración<property name="hibernate.show_sql">true</property><property name="hibernate.format_sql">true</property>
  • 17. Creando una conexión// A SessionFactory is set up once for anapplicationsessionFactory = new Configuration().configure() // configures settings fromhibernate.cfg.xml.buildSessionFactory();
  • 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. Introducción a ORM
  • 20. Java Annotations Conocidos para documentación @Author Apuntes para el compilador @SuppressWarnings("unchecked") @Override Añaden funcionalidad
  • 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. Entity Def ne la clase como una entidad i Es aconsejable que sea Serializable Es requisito que tenga un constructor vacío
  • 23. Table Def ne la tabla dónde reside la entidad i Propiedades: name nombre de la tabla
  • 24. Id Def ne el campo como clave i Subrrogate keys Suele ir acompañado de @GeneratedValue
  • 25. Column Def ne el nombre de la columna i Añade restricciones nullable unique length
  • 26. Añadir la entidad a Hibernate En la conf guración de hibernate, añadir i en mapping la clase.
  • 27. Ejercicio Crear las clases: Country – Id – country City – Id – city Establecer los @Table y @Column
  • 28. Consultas y persistencia
  • 29. Consultar: createQuery Utilizamos createQuery Utiliza una sintaxis similar a SQL Normalmente la utilizamos para devolver objetos Es útil el método list()
  • 30. EjemploQuery query =session.createQuery("SELECT jFROM Jugador j");List<Jugador> result =query.list();
  • 31. Ejercicio Listar el contenido de: Country City con el formato: id: nombre
  • 32. Crear datossession.beginTransaction();Jugador j = new Jugador();j.setNombre(“Carlos”);session.save(j);session.getTransaction().close();
  • 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. Modificar datos Con el objeto que nos interese:session.update(o); Es útil el método uniqueResult()
  • 35. Ejercicio Elegir un país y cambiarle el nombre Ejecutar una query que busque por el nombre, no el identif cador i
  • 36. Eliminar datosdelete(o);
  • 37. Ejercicio Eliminar el país que hemos creado antes Eliminar ciudades que empiecen por e
  • 38. Asociaciones
  • 39. Relaciones OneToMany Las bases de datos son relacionales Queremos que nuestros objetos mantengan la relación cuando persistan Vamos a verlo bilateralmente
  • 40. Ejemplo de OneToMany Lado One:@OneToMany(mappedBy="jugador")private List<Titulo> titulos = newArrayList<Titulo>(); Lado Many:@ManyToOneprivate Country country;
  • 41. Propiedades Para ambas anotaciones fetch fetch=FetchType.EAGER cascade cascade=CascadeType.ALL
  • 42. @JoinColumn No podemos utilizar @Column Utilizamos @JoinColumn@JoinColumn(name="jugador_id")
  • 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. 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. 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. 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. Caso práctico
  • 48. Diseño orientativo
  • 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. 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. Temas avanzados
  • 52. Secuencias de modificaciónint n = session.createQuery("UPDATE Country set country = Zambia WHEREcountry = Carlos Landia").executeUpdate();
  • 53. Otras asociaciones @OneToOne En algunos casos se puede embeber @ManyToMany Es necesario crear una tabla intermedia @JoinTable
  • 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. Herencia Divergencias entre clase y tabla En objetos es bastante común En tablas no :) Hibernate permite herencias
  • 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. 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/