Sistemas de persistencia (orm)hibernate 3.2<br />Licensed under Creative Commons Attribution 3<br />
Guión<br />Teoría<br />Práctica<br />Introducción<br />Elementos principales<br />Librerías<br />Compatibilidad<br />Diagr...
Parte   teóricaHibernate   3.2<br />
1.- Introducción<br />JDBC es laborioso y muy dependiente de la estructura de datos.<br />Lo mas natural en desarrollo con...
1.- Introducción<br />JavaObject<br />SQL Table<br />int id;<br />String name;<br />String getName()<br />intgetId()<br />...
1.- Introducción<br />Es una potente herramienta que permite controlar la persistencia de nuestras aplicaciones contra cua...
1.- Introducción<br />Hibernate es un motor de persistencia de código abierto que nos facilitará tareas como recuperar, gu...
1.- Introducción<br />Resumen  de  características<br />Reduce el código a escribir<br />Fácil modelo de programación (POJ...
2.- Elementos principales<br />Modelo<br />Clases a persistir<br />Han de seguir las especificaciones JavaBeans<br />Archi...
3.- Librerías<br />swarmcache-1.0rc2.jar (1.0rc2)<br />runtime, optional<br />jboss-cache.jar (1.2.2 alpha)<br />TreeCache...
3.- Librerias<br />asm-attrs.jar (unknown)<br />ASM bytecode library<br />runtime, required if using 'cglib' bytecode prov...
3.- Librerias<br />oscache-2.1.jar (2.1)<br />OpenSymphony OSCache<br />runtime, optional<br />asm.jar <br />ASM bytecode ...
3.- Librerias<br />ant-swing-1.6.5.jar (1.6.5)<br />Ant swing support<br />buildtime<br />commons-collections-2.1.1.jar (2...
4.- Compatibilidad<br />Oracle<br />DB2<br />Sysbase<br />MS SQL Server<br />MySQL<br />Interbase<br />Informix<br />Fireb...
5.- diagrama  de  Arquitectura<br />Arquitectura  multicapas<br />Hibernate usa los ficheros de <br />configuración para p...
5.- diagrama  de  Arquitectura<br />Vista   detallada  de  la  arquitectura  de  Hibernate<br />
5.- diagrama  de  Arquitectura<br />Vista   detallada  de  la  arquitectura  de  Hibernate<br />org.hibernate.SessionFacto...
5.- diagrama  de  Arquitectura<br />Vista   detallada  de  la  arquitectura  de  Hibernate<br />org.hibernate.Session<br /...
5.- diagrama  de  Arquitectura<br />Vista   detallada  de  la  arquitectura  de  Hibernate<br />Los objetos persistentes y...
5.- diagrama  de  Arquitectura<br />Vista   detallada  de  la  arquitectura  de  Hibernate<br />Todos los objetos que invo...
5.- diagrama  de  Arquitectura<br />Vista   detallada  de  la  arquitectura  de  Hibernate<br />Objetos transitorios y col...
5.- diagrama  de  Arquitectura<br />Vista   detallada  de  la  arquitectura  de  Hibernate<br />org.hibernate.Transaction<...
5.- diagrama  de  Arquitectura<br />Vista   detallada  de  la  arquitectura  de  Hibernate<br />org.hibernate.connection.C...
5.- diagrama  de  Arquitectura<br />Vista   detallada  de  la  arquitectura  de  Hibernate<br />org.hibernate.TransactionF...
5.- diagrama  de  Arquitectura<br />API  de  Hibernate<br />
Hibernate.cfg.xml<br />Archivo XML principal de configuración de Hiberntate.<br />Su estructura viene marcada por un fiche...
Hibernate.cfg.xml<br />SessionFactory<br />Property<br />Mapping resource<br />Si la SessionFactory no tiene un nombre se ...
Hibernate.cfg.xml<br />Principales  etiquetas<br />Las propiedades (property)<br />hibernate.connection.driver_class : ora...
Hibernate.cfg.xml<br />Principales  dialectos  de  hibernate<br />
Hibernate.cfg.xml<br />En el apartado 7 se cubre la forma como se carga la configuración de hibernte con una clase utilita...
6.- Las  clases  persistentes<br />Son las clases del modelo que se guardan en la base de datos y se pueden recuperar. <br...
6.- Las  clases  persistentes<br />Han de cumplir una serie de requisitos:<br />Métodos get y set para cada atributo de la...
6.- Las  clases  persistentes<br />Las clases persistentes pueden implementar esta interfaz de manera opcional.<br />Propo...
6.- Las  clases  persistentes<br />En aplicaciones reales se dan estructuras complicadas de base de datos, existiendo a ve...
6.- Las  clases  persistentes<br />Mapeo de tipos de datos<br />Mapeo  de  las  clases<br />
6.- Las  clases  persistentes<br />Ejemplo  de  clase  mapeada    -    Categoria.hbm.xml<br /><hibernate-mapping><br />   ...
6.- Las  clases  persistentes<br />Ejemplo  de  clase  mapeada    -    Categoria.java<br />public class Categoria implemen...
6.- Las  clases  persistentes<br />Ejemplo  de  clase  mapeada    -    Categoria.java<br /> public BigDecimal getIdCategor...
6.- Las  clases  persistentes<br />Restricciones de seguridad<br /><Many-to-one>: Utilizada para definir relaciones de muc...
6.- Las  clases  persistentes<br />Colecciones de objetos<br />Hibernate puede tratar instancias de:<br />Map, Set, Sorted...
6.- Las  clases  persistentes<br />La Herencia, en Hibernate es abordada de tres formas distintas.<br />La más elegante es...
6.- Las  clases  persistentes<br />La Herencia, en Hibernate es abordada de tres formas distintas.<br />La segunda forma d...
7.- utilización<br />Lo primero que se deberíamos hacer para utilizar Hibernate es crear un objeto Configuration para indi...
7.- utilización<br />HibernateUtil<br />publicclassHibernateUtil {<br />privatestatic final SessionFactorysessionFactory;<...
7.- utilización<br />Carga  de  un  SessionFactory   desde  JNDI<br />private final SessionFactorysessionFactory = getSess...
8.- carga  de  objetos  por  su  id<br />CRUD	<br />Para recuperar un objeto de la base de datos el objeto session dispone...
8.- nuevos objetos  persistentes<br />CRUD	<br />Para almacenar todos los objetos de nueva creación en la base de datos es...
8.- búsqueda  de  objetos<br />Uso de criterios de búsqueda	<br />La clase org.hibernate.Criteria, esta es un API para rec...
8.- búsqueda  de  objetos<br />Uso de criterios de búsqueda	<br />Listcats = session.createCriteria(Cat.class)<br />     ....
8.- Actualización  de  objetos<br />La actualización de la base de datos se puede hacer de dos formas distintas<br />La pr...
8.- Actualización  de  objetos<br />CRUD	<br />publicvoidattachDirty(Usuario instance) {<br />log.debug("attachingdirty Us...
8.- Borrado  de  objetos<br />CRUD	<br />Para eliminar un objeto existe el método delete del objeto session.<br />También ...
8.- Sincronización  de  datos<br />CRUD  -  session.flush()	<br />Llegado el momento en que la session ha ejecutar las sen...
9.- Transacciones<br />Hibernate utiliza directamente conexiones JDBC y recursos JTA sin añadir comportamientos adicionale...
9.- Transacciones<br />Una Session no es cara de crear (no es threadsafe), se suele utilizar en una petición o unidad de t...
9.- Transacciones<br />Transaction tx = session.beginTransaction(); <br />tx.commit(); <br />tx.rollback(); <br />Transact...
9.- Transacciones<br />Ejemplo  simple  de  Transaction<br />publicstaticvoidmain(String[] args) {<br />Configurationcfg =...
10.- hibernatequerylanguage<br />SQL orientado a objetos<br />Clases y atributos vs. Tablas y columnas<br />Asociaciones, ...
10.- hibernatequerylanguage<br />Lenguaje de consultas de Hibernate similar al SQL, pero orientado a objetos. Ej.:<br />fr...
10.- hibernatequerylanguage<br />Cuenta con las típicas funciones matemáticas que se pueden utilizar.<br />El polimorfismo...
10.- hibernatequerylanguage<br />La cláusula where, es muy similar a la de SQL. La ventaja es que se pueden referenciar lo...
10.- hibernatequerylanguage<br />El resto de cláusulas típicas de SQL tambien se pueden utilizar en HQL como:<br />group b...
10.- Consultas  hql<br />Métodos<br />Cuando no se conoce el identificador de los objetos a cargar, Hibernate nos proporci...
10.- Consultas  hql<br />Métodos<br />Para poder controlar los resultados que devuelve una consulta, como puede ser el núm...
10.- Consultas  hql<br />Consultas  con  parámetros <br />Query q = session.createQuery("from Categoria where nombre like ...
10.- Consultas  hql<br />Resultados escalares<br />Iterator results = sess.createQuery(<br />"select cat.color, min(cat.bi...
10.- Consultas  hql<br />Filtrado  por  conjunto  de  valores<br />//named parameter list<br />List names = new ArrayList(...
10.- Consultas  sql Nativas<br />Externalización   de  consultas  en  ficheros<br />Se pueden definir consultas HQL y alma...
10.- Consultas  nativas  sql<br />createSQLQuery<br />Se pueden definir consultas HQL y almacenarlas en un fichero asignan...
11.- caché<br />La caché es un mecanismo que nos permite almacenar nuestras estructuras de datos en memoria, evitándonos v...
11.- caché<br />Ofrece una caché de dos niveles (L1 y L2), donde solo el primero es obligatorio.<br />También incluye una ...
Presentación<br />Interpretación<br />Servicios<br />Spring Framework<br />IoC, AOP<br />Integración<br />12.- hibernate  ...
12.- hibernate   y   spring<br />Diseño  Spring  con  Hibernate<br />Manager / Delegate<br /><<interfaz>><br />Service<br ...
12.- hibernate   y   spring<br />Administra la SessionFactory y la Session.<br />Administración declarativa de transaccion...
12.- hibernate   y   spring<br />HibernateTemplate<br />Proporcionado por Spring<br />Hibernate AOP<br />Los DAO necesitan...
12.- hibernate   y   spring<br />Session session =    HibernateUtil.getSessionFactory().getCurrentSession();<br />session....
13.- Logging<br />Modo Debug activado<br />
Parte   prácticahibernate  3.2<br />
Instalación<br />Tenemos que descargarlo de http://www.hibernate.org/<br />Hay que colocar sus JARs dentro del directorio ...
Utilización  –  Ejemplo  simple<br />Pasos<br />Crear una tabla en la base de datos<br />Clase equivalente en código java<...
Utilización  –  Ejemplo  simple<br />Creación de la tabla en la base de datos.CREATE TABLE persona (id VARCHAR(32) NOT NUL...
Utilización  –  Ejemplo  simple<br />La clase persistente<br />
Utilización  –  Ejemplo  simple<br />Fichero de mapeo Persona.hbm.xml, ubicado en el mismo directorio que la clase compila...
Utilización  –  Ejemplo  simple<br />Código Java de utilización del API de Hibernate<br />Insertando en la base de datos <...
Jboss ide   -   hibernate   tools<br />Una herramienta útil para hacer proyectos Hibernate es Hibernate-Tools, que viene i...
- FIN -<br />Licensed under Creative Commons Attribution 3<br />
Próxima SlideShare
Cargando en…5
×

Hibernate 3.2 short manual

31.001 visualizaciones

Publicado el

Manual introductorio a Hibernate 3.2

Publicado en: Tecnología
5 comentarios
20 recomendaciones
Estadísticas
Notas
Sin descargas
Visualizaciones
Visualizaciones totales
31.001
En SlideShare
0
De insertados
0
Número de insertados
14.075
Acciones
Compartido
0
Descargas
0
Comentarios
5
Recomendaciones
20
Insertados 0
No insertados

No hay notas en la diapositiva.

Hibernate 3.2 short manual

  1. 1. Sistemas de persistencia (orm)hibernate 3.2<br />Licensed under Creative Commons Attribution 3<br />
  2. 2. Guión<br />Teoría<br />Práctica<br />Introducción<br />Elementos principales<br />Librerías<br />Compatibilidad<br />Diagramas de Arquitectura<br />Clases persistentes<br />Utilización<br />Operaciones CRUD<br />Transacciones<br />HQL<br />Cache<br />Hibernate y Spring<br />Instalacion<br />Ejemplo simple<br />Hibernate tools<br />Ejemplo completo<br />
  3. 3. Parte teóricaHibernate 3.2<br />
  4. 4. 1.- Introducción<br />JDBC es laborioso y muy dependiente de la estructura de datos.<br />Lo mas natural en desarrollo con lenguajes OO es utilizar objetos, lamentablemente las BBDD orientadas a objetos aún no adquieren suficiente madurez.<br />La solución mas adecuada a estos problemas es usar sistemas de persistencia que abstraigan a los desarrolladores del conocimiento de sentencias SQL, los cuales traducen objetos a registros y vice-versa.<br />Internamente utiliza reflexión, lo cual permite a un objeto examinarse y manipularse en tiempo de ejecución.<br />
  5. 5. 1.- Introducción<br />JavaObject<br />SQL Table<br />int id;<br />String name;<br />String getName()<br />intgetId()<br />void setName(String)<br />void setId(int)<br />id [int] primary key,<br />name [varchar(50)]<br />La función de un O/R Mappertiene<br />lugaraquí<br />Dos paradigmas muy diferentes<br />Objetos, atributos, asociaciones con otros objetos, herencia, UML …<br />Columnas, claves ajenas, consultas lenguaje SQL<br />
  6. 6. 1.- Introducción<br />Es una potente herramienta que permite controlar la persistencia de nuestras aplicaciones contra cualquier base de datos, encapsulando la persistencia de objetos Java a bases de datos relacionales.<br />Existen otras soluciones alternativas a Hibernate pero esta es una de las mas completas y con una amplia difusión en el desarrollo Java.<br />Hibernate realiza automáticamente la inserción y recuperación en base de datos de cualquier objeto Java, haciendo transparente todo el proceso de conexión y las consultas SQL necesarias para insertar, actulizar, eliminar o recuperar la información.<br />También permite manejar colecciones de objetos Java como ArrayList, Vector, Hashtable, Collection, Set y Map.<br />¿Qué es?<br />
  7. 7. 1.- Introducción<br />Hibernate es un motor de persistencia de código abierto que nos facilitará tareas como recuperar, guardar, modificar o eliminar objetos en una base de datos relacional.<br />session.get(string tipo,id);|session.load(string tipo,id);<br />session.save(miObjeto);<br />session.saveOrUpdate(miObjeto);<br />session.delete(miObjeto);<br />Se configura mediante un archivo de configuración hibernate.properties ó hibernate.cfg.xml donde se definen los objetos con sus equivalencias en base de datos.<br />En el archivo de configuración se asocia una Clase a una Tabla y cada Propiedad de la clase a una Columna de dicha tabla.<br />¿Qué es?<br />
  8. 8. 1.- Introducción<br />Resumen de características<br />Reduce el código a escribir<br />Fácil modelo de programación (POJO)<br />Tiene estrategias avanzadas de cache (L1 y L2)<br />Optimiza las SQL (nunca actualiza datos vacios)<br />Tiene estrategias de carga perezosas<br />Da independencia y abstracción sobre los proveedores de base de datos<br />Mapea relaciones de tipos de objetos (one-to-one, one-to-many, many-to-many)<br />Provee objetos desconectados<br />Tiene soporte completo para JTA<br />Tiene excelente integración con Spring<br />
  9. 9. 2.- Elementos principales<br />Modelo<br />Clases a persistir<br />Han de seguir las especificaciones JavaBeans<br />Archivo de mapeo<br />Relaciona el objeto a persistir co nuna entidad de la base de datos<br />Archivo de configuración<br />Se configura por ficheros de configuración en los cuales se indica<br />Origen de datos<br />Transacciones<br />etc<br />DAO<br />Clase que aglomera todo el tratamiento de la persistencia<br />
  10. 10. 3.- Librerías<br />swarmcache-1.0rc2.jar (1.0rc2)<br />runtime, optional<br />jboss-cache.jar (1.2.2 alpha)<br />TreeCache clustered cache- runtime, optional<br />jgroups-2.2.8.jar (2.2.8)<br />JGroups multicast library<br />runtime, optional (required by replicated caches)<br />jta.jar <br />Standard JTA API<br />runtime, required for standalone operation (outside application server)<br />xml-apis.jar <br />Standard JAXP API<br />runtime, some SAX parser is required<br />commons-logging-1.0.4.jar (1.0.4)<br />Commons Logging<br />runtime, required<br />c3p0-0.9.1.jar (0.9.1)<br />C3P0 JDBC connection pool<br /> runtime, optional (needed if using c3p0 as the connection pooling library)<br />jboss-system.jar <br />runtime, optional (required by TreeCache)<br />
  11. 11. 3.- Librerias<br />asm-attrs.jar (unknown)<br />ASM bytecode library<br />runtime, required if using 'cglib' bytecode provider<br />jacc-1_0-fr.jar (1.0-fr)<br />JACC Library<br />runtime, optional<br />checkstyle-all.jar <br />Checkstyle<br />Buildtime<br />log4j-1.2.11.jar (1.2.11)<br />Log4j Library<br />runtime, optional<br />junit-3.8.1.jar (3.8.1)<br />JUnit test framework<br />buildtime<br />javassist.jar (3.4)<br />Javassist bytecode generator<br />runtime, required if using 'javassist' bytecode provider<br />dom4j-1.6.1.jar (1.6.1)<br />XML configuration & mapping parser<br />runtime, required<br />antlr-2.7.6.jar (2.7.6)<br />ANother Tool for Language Recognition<br />runtime, required<br />cglib-2.1.3.jar (2.1.3)<br />CGLIB bytecode generator<br />runtime, required if using 'cglib' bytecode provider<br />jboss-common.jar <br />runtime, optional (required by TreeCache)<br />
  12. 12. 3.- Librerias<br />oscache-2.1.jar (2.1)<br />OpenSymphony OSCache<br />runtime, optional<br />asm.jar <br />ASM bytecode library<br />runtime, required if using 'cglib' bytecode provider<br />ant-launcher-1.6.5.jar (1.6.5)<br />Ant launcher<br />buildtime<br />jaas.jar <br />Standard JAAS API<br />runtime, optional (required by JCA)<br />ant-antlr-1.6.5.jar (1.6.5)<br />Ant antlr support<br />buildtime<br />jboss-jmx.jar<br />runtime, optional (required by TreeCache)<br />cleanimports.jar<br />Cleanimports<br />buildtime<br />xerces-2.6.2.jar (2.6.2)<br />SAX parser<br />runtime, required for JDK < 1.4<br />jaxen-1.1-beta-7.jar (1.1-beta-7)<br />Jaxen - universal java xpath engine<br />runtime, required if you want to deserialize a Configuration to improve startup performance<br />ant-junit-1.6.5.jar (1.6.5)<br />Ant junit support<br />buildtime<br />
  13. 13. 3.- Librerias<br />ant-swing-1.6.5.jar (1.6.5)<br />Ant swing support<br />buildtime<br />commons-collections-2.1.1.jar (2.1.1)<br />Commons Collections<br />runtime, required<br />ant-1.6.5.jar (1.6.5)<br />Ant core- buildtime<br />proxool-0.8.3.jar (0.8.3)<br />Proxool JDBC connection pool- runtime, optional (needed if using proxool as the connection pooling library)<br />concurrent-1.3.2.jar (1.3.2)<br />runtime, optional (required by TreeCache)<br />syndiag2.jar (2.0)<br />antlr to bnf image generator<br />buildtime<br />
  14. 14. 4.- Compatibilidad<br />Oracle<br />DB2<br />Sysbase<br />MS SQL Server<br />MySQL<br />Interbase<br />Informix<br />Firebird<br />Otras…<br />Soporta algunas bases de datos como<br />
  15. 15. 5.- diagrama de Arquitectura<br />Arquitectura multicapas<br />Hibernate usa los ficheros de <br />configuración para proporcionar <br />servicios de persistencia <br />a las aplicaciones<br />
  16. 16. 5.- diagrama de Arquitectura<br />Vista detallada de la arquitectura de Hibernate<br />
  17. 17. 5.- diagrama de Arquitectura<br />Vista detallada de la arquitectura de Hibernate<br />org.hibernate.SessionFactory<br />Cache inmutable de los mapeos compilados para una base de datos.<br />Es una factoria de Session y un cliente de ConnectionProvider.<br />Puede almacenar un segundo nivel de cache de datos rehusables, entre transacciones, procesos o a nivel de cluster.<br />SessionFactory<br />
  18. 18. 5.- diagrama de Arquitectura<br />Vista detallada de la arquitectura de Hibernate<br />org.hibernate.Session<br />Envuelve una conexión JDBC.<br />Factoria de transaccionse<br />Almacena el primer nivel de cache para los objetos persistentes cuando son buscados por identificador o mediante queries.<br />Tiene un corto periodo de vida mientras la aplicación y la DB intercambian información.<br />Session<br />
  19. 19. 5.- diagrama de Arquitectura<br />Vista detallada de la arquitectura de Hibernate<br />Los objetos persistentes y las colecciones.<br />Llamados también POJOS o JavaBeans<br />Contienen el estado los datos persistentes<br />Se asocian únicamente a una Session.<br />Tan pronto como la Session se cierra, estos son desligados y liberados para ser utilizados en cualquier capa de la aplicación (DTO)<br />Objetos persistentes<br />
  20. 20. 5.- diagrama de Arquitectura<br />Vista detallada de la arquitectura de Hibernate<br />Todos los objetos que involucra hibernate (clases-tablas) pueden tener tres estados:<br />Transient<br />La instancia no esta asociada con ningún contexto de persistencia. No tiene identificador de persistencia (PK).<br />Persistent<br />Instancia asociada a un contexto persistente, su PK tiene valor y puede corresponder con una fila de base de datos.<br />Detached<br />La instancia estuvo asociada a un contexto pero este fue cerrado o fue serializada a otro proceso<br />Estados de las instancias de los objetos persistentes<br />
  21. 21. 5.- diagrama de Arquitectura<br />Vista detallada de la arquitectura de Hibernate<br />Objetos transitorios y colecciones<br />Son instancias de las clases persistentes que no estan asociadas a una Session.<br />Pueden ser instanciadas por la aplicación y no ser persistidas o pueden ser el resultado de un correcto cierre de la sesion (session.close())<br />Objetos transitorios<br />
  22. 22. 5.- diagrama de Arquitectura<br />Vista detallada de la arquitectura de Hibernate<br />org.hibernate.Transaction<br />(Opcional) Usado por las aplicaciones para indicar unidades de trabajo atómicas.<br />Abstrae a la aplicación de las transacciones subjacentes de JDBC, JTA o CORBA.<br />Una session puede crear múltiples transacciones en algunos casos.<br />Toda transaccion se ha confirmar o rechazar.<br />Transaction<br />
  23. 23. 5.- diagrama de Arquitectura<br />Vista detallada de la arquitectura de Hibernate<br />org.hibernate.connection.ConnectionProvider<br />(Opcional) Factoria de conexiones JDBC<br />Abstrae a la aplicación del uso de DataSource o DriverManager.<br />No esta expuesta para la aplicación, per o los desarrolladores lo pueden extender o implementar.<br />ConnectionProvider<br />
  24. 24. 5.- diagrama de Arquitectura<br />Vista detallada de la arquitectura de Hibernate<br />org.hibernate.TransactionFactory<br />(Opcional) Factoria de instancias de transacciones.<br />No esta expuesta para la aplicación, pero los desarrolladores pueden implementarla o extenderla.<br />TransactionFactory<br />
  25. 25. 5.- diagrama de Arquitectura<br />API de Hibernate<br />
  26. 26. Hibernate.cfg.xml<br />Archivo XML principal de configuración de Hiberntate.<br />Su estructura viene marcada por un fichero descriptivo llamado hibernate-configuration-3.0.dtd<br />Contiene los datos de conexión con la base de datos.<br />Contiene los mapeos a los ficheros descriptivos de las clases persistentes del dominio.<br />
  27. 27. Hibernate.cfg.xml<br />SessionFactory<br />Property<br />Mapping resource<br />Si la SessionFactory no tiene un nombre se utiliza por defecto a nivel global de la aplicación, si se dispone de varias bases de datos hay que tener un SessionFactory por cada una, en diferentes ficheros de configuración.<br />En las propiedades (Property) se definen los elementos necesarios para establecer las conexiones.<br />Mediante la etiqueta Mapping se señala donde esta el fichero xml con el mapeo entre las clases Java y la tabla de la base de datos enlazada.<br />Principales etiquetas<br />
  28. 28. Hibernate.cfg.xml<br />Principales etiquetas<br />Las propiedades (property)<br />hibernate.connection.driver_class : oracle.jdbc.driver.OracleDriver<br />hibernate.connection.username : test<br />hibernate.connection.password : test<br />hibernate.connection.url : jdbc:oracle:thin:@localhost:1521:xe<br />hibernate.dialect : org.hibernate.dialect.Oracle10gDialect<br />hibernate.connection.autocommit : true<br />Hibernate.showsql : true<br />hibernate.default_schema : test<br />cache.provider_class : org.hibernate.cache.NoCacheProvider<br />hbm2ddl.auto : create<br />hibernate.use_sql_comments : true<br />Implemetación particular de SQL que Hibernate genera<br />Muestra las sentencias SQL que Hibernate ejecuta<br />Crea automáticamente el esquema de base de datos<br />Desactiva la cache de segundo nivel<br />Genera comentadios dentro de las sentencias SQL para facilitar la depuración<br />
  29. 29. Hibernate.cfg.xml<br />Principales dialectos de hibernate<br />
  30. 30. Hibernate.cfg.xml<br />En el apartado 7 se cubre la forma como se carga la configuración de hibernte con una clase utilitaria llamada HibernateUtil.<br />Todos los nombres de las propiedades que soporta Hibernate estan definidos en org.hibernate.cfg.Environment<br />Utilización y carga<br />
  31. 31. 6.- Las clases persistentes<br />Son las clases del modelo que se guardan en la base de datos y se pueden recuperar. <br />Usualmente denominadas POJO(Plain Old Java Object)<br />Toda clase persistente tiene un fichero descriptivo .hbm, el cual describe el mapeo entre la clase y la tabla de la base de datos asociada., Asi como parametros de actualización en cascada, composición del método ToString, y otros.<br />
  32. 32. 6.- Las clases persistentes<br />Han de cumplir una serie de requisitos:<br />Métodos get y set para cada atributo de la clase.<br />Constructor por defecto sin argumentos para que hibernate pueda instanciarla.<br />Atributo identificador, en la clase persona el atributo id es el identificador de la clase y la PK de la tabla correspondiente.<br />Es recomendable implementar los métodos equals() y hashcode().<br />Interfaz Lifecycle.- de forma opcional una clase persistente puede implementar esta interfaz, la cual permite ejecutar acciones después de alguna operación<br />
  33. 33. 6.- Las clases persistentes<br />Las clases persistentes pueden implementar esta interfaz de manera opcional.<br />Proporciona callbacks desde la session hacia el objeto persistente.<br />onSave .- invocado antes que el objeto sea almacenado. <br />onUpdate .- Invocado antes que el objeto sea actualizado.<br />onDelete .- Invocado antes que el objeto sea eliminado.<br />onLoad .- invocado después que el objeto sea cargado de la base de datos.<br />Interfaz Lifecycle<br />
  34. 34. 6.- Las clases persistentes<br />En aplicaciones reales se dan estructuras complicadas de base de datos, existiendo a veces múltiple dependencias entre objetos y diversas restricciones de integridad.<br />Los ficheros de mapeo dan cobertura a los requisitos mencionados anteriormente mediante etiquetas que definen diversos tipos de clases como colecciones de objetos, herencias o clases persistentes cuyos atributos son otras clases persistentes.<br />Mapeo de las clases<br />
  35. 35. 6.- Las clases persistentes<br />Mapeo de tipos de datos<br />Mapeo de las clases<br />
  36. 36. 6.- Las clases persistentes<br />Ejemplo de clase mapeada - Categoria.hbm.xml<br /><hibernate-mapping><br /> <class name="edu.training.hibernate.Categoria" table="CATEGORIA"><br /> <id name="idCategoria" type="big_decimal"><br /> <column name="ID_CATEGORIA" precision="22" scale="0" /><br /> <generator class="assigned" /><br /> </id><br /> <property name="nombre" type="string"><br /> <column name="NOMBRE" length="100" /><br /> </property><br /> <set name="productos" inverse="true"><br /> <key><br /> <column name="ID_CATEGORIA" precision="22" scale="0" /><br /> </key><br /> <one-to-many class="edu.training.hibernate.Producto" /><br /> </set><br /> </class><br /></hibernate-mapping><br />El generador de claves primarias además de ser asignado manualmenete, tambien se puede establecer mediante <br />una secuence:<br /><generatorclass="sequence"><br /> <param name="sequence">SEQ_de_oracle</param><br /></generator><br />Aunque tambien una clase personalizada que implemente de org.hibernate.id.IdentifierGenerator<br /><generatorclass="edu.training.hibernate.generator.CustomGenerator"><br />
  37. 37. 6.- Las clases persistentes<br />Ejemplo de clase mapeada - Categoria.java<br />public class Categoria implements java.io.Serializable {<br /> private BigDecimal idCategoria;<br /> private String nombre;<br /> private Set<Producto> productos = new HashSet<Producto>(0);<br /> public Categoria() { }<br /> public Categoria(BigDecimal idCategoria) {<br /> this.idCategoria = idCategoria;<br /> }<br /> public Categoria(BigDecimal idCategoria, String nombre,<br /> Set<Producto> productos) {<br /> this.idCategoria = idCategoria;<br /> this.nombre = nombre;<br /> this.productos = productos;<br /> }<br />
  38. 38. 6.- Las clases persistentes<br />Ejemplo de clase mapeada - Categoria.java<br /> public BigDecimal getIdCategoria() {<br /> return this.idCategoria;<br /> }<br /> public void setIdCategoria(BigDecimal idCategoria) {<br /> this.idCategoria = idCategoria;<br /> }<br /> public String getNombre() {<br /> return this.nombre;<br /> }<br /> public void setNombre(String nombre) {<br /> this.nombre = nombre;<br /> }<br /> public Set<Producto> getProductos() {<br /> return this.productos;<br /> }<br /> public void setProductos(Set<Producto> productos) {<br /> this.productos = productos;<br /> }<br />}<br />
  39. 39. 6.- Las clases persistentes<br />Restricciones de seguridad<br /><Many-to-one>: Utilizada para definir relaciones de muchos a uno, como por ejemplo varios productos que pertenecen a un único pedido.<br /><One-to-Many>: Es el caso contrario al anterior, en el fichero de mapeo de la clase pedido se podrá indicar que este puede contener varios productos.<br /><One-to-one>: Para definir relaciones uno a uno y se utiliza para tablas que compartan la clave primaria o para referencias a una clave foránea.<br />Mapeo de las clases<br />
  40. 40. 6.- Las clases persistentes<br />Colecciones de objetos<br />Hibernate puede tratar instancias de:<br />Map, Set, SortedMap, SortedSet, List, Cualquier array de objetos persistentes.<br />Las etiquetas que pueden mapear esto son: <br /><map>, <set>, <list>, <bag>, <array> y <primitive-array><br />Mapeo de las clases<br />
  41. 41. 6.- Las clases persistentes<br />La Herencia, en Hibernate es abordada de tres formas distintas.<br />La más elegante es usar la misma tabla para almacenar los datos de las distintas clases de la misma familia<br />Se puede observar que de la clase Perro heredan dos clases hijas que serian Mastin y Bulldog, esto se hace con la etiqueta <subclass>.<br />Mapeo de las clases<br />
  42. 42. 6.- Las clases persistentes<br />La Herencia, en Hibernate es abordada de tres formas distintas.<br />La segunda forma de herencia es guardar los datos de una subclase en otra tabla distinta sustituyendo la etiqueta <subclass>.<br />La tercera forma es definir la herencia con una etiqueta class para cada clase de la familia, con lo que se guardarían en tablas independientes, sin ninguna relación entre ellas.<br />Mapeo de las clases<br />
  43. 43. 7.- utilización<br />Lo primero que se deberíamos hacer para utilizar Hibernate es crear un objeto Configuration para indicarle donde esta el archivo de configuración.Configuration cfg = new Configuration();cfg.configure(“…hibernate.cfg.xml”);<br />Ahora deberiamos abrir una sesión en Hibernate con el SessionFactory.SessionFactory sessionFactory = cfg.buildSessionFactory();Session session = sessionFactory.openSession();<br />Una session representa una conexión con la base de datos, es recomendable tener una clase que se especialice en darnos acceso de forma conveniente al SessionFactory<br />Carga de configuración y el SessionFactory<br />
  44. 44. 7.- utilización<br />HibernateUtil<br />publicclassHibernateUtil {<br />privatestatic final SessionFactorysessionFactory;<br />static {<br /> try {<br />sessionFactory = new Configuration().configure().buildSessionFactory();<br /> } catch (Throwable ex) {<br /> // Makesureyou log theexception, as itmight be swallowed<br />System.err.println("InitialSessionFactorycreationfailed." + ex);<br />throw new ExceptionInInitializerError(ex);<br /> }<br /> }<br />publicstaticSessionFactorygetSessionFactory() {<br />returnsessionFactory;<br /> }<br />}<br />
  45. 45. 7.- utilización<br />Carga de un SessionFactory desde JNDI<br />private final SessionFactorysessionFactory = getSessionFactory();<br />protectedSessionFactorygetSessionFactory() {<br /> try {<br />return (SessionFactory) new InitialContext().lookup("SessionFactory");<br /> } catch (Exception e) {<br />log.error("CouldnotlocateSessionFactory in JNDI", e);<br />throw new IllegalStateException(<br /> "CouldnotlocateSessionFactory in JNDI");<br /> }<br />}<br />
  46. 46. 8.- carga de objetos por su id<br />CRUD <br />Para recuperar un objeto de la base de datos el objeto session dispone de los métodos load y get.<br />Solo se debe utilizar load si se esta seguro que el objeto existe.<br />El método get devuelve la instancia de un objeto o null si esta no existe.<br />public Usuario findById(java.math.BigDecimalid) {<br />log.debug("getting Usuario instancewith id: " + id);<br /> try {<br /> Usuario instance = (Usuario) sessionFactory.getCurrentSession()<br />.get("edu.training.hibernate.Usuario", id);<br />if (instance == null) {<br />log.debug("getsuccessful, no instancefound");<br /> } else {<br />log.debug("getsuccessful, instancefound");<br /> }<br />returninstance;<br />…………..<br />
  47. 47. 8.- nuevos objetos persistentes<br />CRUD <br />Para almacenar todos los objetos de nueva creación en la base de datos es necesario invocar el método save del objeto session.<br />Usuario usr = new Usuario();<br />usr.setApellidos("apellidos hibernate");<br />usr.setNombre("nombre hibernate");<br />usr.setPassword("password");<br />usr.setTipo("admin2");<br />usr.setUsuario("hib@hib.org2");<br />ses.save(usr);<br />
  48. 48. 8.- búsqueda de objetos<br />Uso de criterios de búsqueda <br />La clase org.hibernate.Criteria, esta es un API para recuperar entidades mediante la composición de criterios y que es capaz de devolver múltiples resultados.<br />publicList<Usuario> findByExample(Usuario instance) {<br />log.debug("finding Usuario instancebyexample");<br /> try {<br />Criteriacriterio = sessionFactory<br /> .getCurrentSession().createCriteria("edu.training.hibernate.Usuario");<br />criterio.add(create(instance));<br />List<Usuario> results = (List<Usuario>) criterio.list();<br />log.debug("findbyexamplesuccessful, resultsize: "+ results.size());<br />returnresults;<br /> } catch (RuntimeException re) {<br />} …………..<br />
  49. 49. 8.- búsqueda de objetos<br />Uso de criterios de búsqueda <br />Listcats = session.createCriteria(Cat.class)<br /> .add( Restrictions.like("name", "Iz%") )<br /> .add( Restrictions.gt( "weight", new Float(minWeight) ) )<br /> .addOrder( Order.asc("age") )<br /> .list();<br />
  50. 50. 8.- Actualización de objetos<br />La actualización de la base de datos se puede hacer de dos formas distintas<br />La primera mediante el método flush del objeto session. Este método hace que se actualice en la base de datos que estén en memoria en el estado actual. Se recomienda su uso antes de :<br />Hacer un commit<br />Cerrar una session<br />Dependiendo del parametro flush-mode, Transaction.commit() llama al método flush.<br />La otra forma es utilizando el método saveOrUpdate, el cual graba un objeto nuevo o lo actualiza, dependiendo del valor almacenado en unsaved-value.Esta operación se lanza en cascada en sus instancias asociadas si en el fichero de mapeo se encuentra cascade="save-update".<br />CRUD <br />
  51. 51. 8.- Actualización de objetos<br />CRUD <br />publicvoidattachDirty(Usuario instance) {<br />log.debug("attachingdirty Usuario instance");<br /> try {<br />sessionFactory.getCurrentSession().saveOrUpdate(instance);<br />log.debug("attachsuccessful");<br /> } catch (RuntimeException re) {<br />log.error("attachfailed", re);<br />throw re;<br /> }<br />}<br />
  52. 52. 8.- Borrado de objetos<br />CRUD <br />Para eliminar un objeto existe el método delete del objeto session.<br />También es posible eliminar varios objetos con una sola llamada al método delete pasándole una query.<br />publicvoiddelete(Usuario persistentInstance) {<br />log.debug("deleting Usuario instance");<br /> try {<br />sessionFactory.getCurrentSession().delete(persistentInstance);<br />log.debug("deletesuccessful");<br /> } catch (RuntimeException re) {<br />log.error("deletefailed", re);<br />throw re;<br /> }<br />}<br />
  53. 53. 8.- Sincronización de datos<br />CRUD - session.flush() <br />Llegado el momento en que la session ha ejecutar las sentencias SQL y volcar el estado de los objetos en la base de datos, la session dispone de un método llamado flush, el cual se encarga de hacer esto.<br />El proceso de flush ocurre por defecto en los siguientes puntos:<br />Antes de la ejecución de las queries<br />Desde el commit de una transaccion<br />Desde session.flush()<br />Las sentencias SQL son ejecutadas en el siguiente orden:<br />Todos los inserts en el orden en el que hayan sido guardados (session.save())<br />Todas las actualizaciones<br />Todas las sentencias de borrado<br />
  54. 54. 9.- Transacciones<br />Hibernate utiliza directamente conexiones JDBC y recursos JTA sin añadir comportamientos adicionales de bloqueo.<br />Hibernate no bloquea los objetos en memoria.<br />Mediante el objeto Session, Hibernate proporciona multiples lecturas de objetos por su identificador y las queries de entidades.<br />El objeto SessionFactory es costoso de crear, pero puede ser compartido por todos los threads de la aplicación, este suele ser creado una vez cuando la aplicación se inicia desde una instancia del objeto Configuration.<br />Transacciones y concurrencia<br />
  55. 55. 9.- Transacciones<br />Una Session no es cara de crear (no es threadsafe), se suele utilizar en una petición o unidad de trabajo y posteriormente es descatado y sobre todo no obtiene una conexión JDBC hasta que no es realmente necesario.<br />Una transaccion ha de durar lo menos posible para reducir la contención de bloqueo en la base de datos.<br />Las transacciones de periodos muy largos pueden impedir que la aplicación escale durante una fuerte carga de concurrencia.<br />Transacciones y concurrencia<br />
  56. 56. 9.- Transacciones<br />Transaction tx = session.beginTransaction(); <br />tx.commit(); <br />tx.rollback(); <br />Transaction<br />
  57. 57. 9.- Transacciones<br />Ejemplo simple de Transaction<br />publicstaticvoidmain(String[] args) {<br />Configurationcfg = new Configuration();<br />SessionFactoryfactory = cfg.configure().buildSessionFactory();<br />Sessionsession = factory.openSession();<br />Transactiontx = session.beginTransaction();<br />Messagesmessage = new Messages();<br />message.setMessageText(“HelloWorld);<br />session.save(message);<br />tx.commit();<br />}<br />
  58. 58. 10.- hibernatequerylanguage<br />SQL orientado a objetos<br />Clases y atributos vs. Tablas y columnas<br />Asociaciones, polimorfismo<br />Soporta operaciones relacionales<br />Proyección, agregación, grupos<br />Subconsultas<br />Funciones SQL<br />HQL<br />
  59. 59. 10.- hibernatequerylanguage<br />Lenguaje de consultas de Hibernate similar al SQL, pero orientado a objetos. Ej.:<br />from paquete.Persona<br />La cláusula select es opcional, es necesario indicar el paquete al que pertenece la clase, por que en las consultas es el nombre de las clases el que se utiliza y NO el de la tabla de base de datos.<br />En la cláusula select hay que hacer referencia a los atributos de la clase, ya que es la propia clase la que es referenciada en la consulta y NO la tabla en la que se almacena.<br />Select per.nombre from paquete.Persona per<br />Como en SQL se pueden usar alias en los nombres de las tablas.<br />HQL<br />
  60. 60. 10.- hibernatequerylanguage<br />Cuenta con las típicas funciones matemáticas que se pueden utilizar.<br />El polimorfismo en las consultas se trata de una manera muy sencilla, si se hace una consulta sobre una clase, también se devolverán sus subclases<br />from java.lang.Object o<br />Esta consulta devolverá todos los objetos persistentes.<br />HQL<br />
  61. 61. 10.- hibernatequerylanguage<br />La cláusula where, es muy similar a la de SQL. La ventaja es que se pueden referenciar los atributos de la clase que se consulte, incluso si es un array.<br />Los operadores habituales disponibles son : =, >=, <=, <>, ¡=, like.<br />HQL<br />
  62. 62. 10.- hibernatequerylanguage<br />El resto de cláusulas típicas de SQL tambien se pueden utilizar en HQL como:<br />group by<br />having<br />order by<br />Etc...<br />HQL<br />
  63. 63. 10.- Consultas hql<br />Métodos<br />Cuando no se conoce el identificador de los objetos a cargar, Hibernate nos proporciona un mecanismo de consultas para ubicarlos y cargarlos desde la base de datos.<br />Este mecanismo se conoce como HQL, el cual permite hacer consultas directamente sobre las clases java.<br />El método createQuery (String consulta) del objeto session permite crear consultas HQL, para luego invocar al método list().<br />Las consultas tambien se pueden expresar en SQL nativo con el soporte de Hiberntate para convertir el conjunto de resultados en objetos Java.<br />Las consultas HQL y el SQL nativo se representa con una instancia de org.hibernate.Query, este ofrece métodos para enlazar parametros, manejo de resultados y ejecución de la query asociada.<br />
  64. 64. 10.- Consultas hql<br />Métodos<br />Para poder controlar los resultados que devuelve una consulta, como puede ser el número máximo de filas o la primera fila que se debe devolver, se puede crear una instancia de la clase Query.<br />Como se aprecia hay diferentes maneras de recuperar los datos de las tablas con Hibernate, sin utilizar SQL, de todas maneras es posible realizar consultas en SQL nativo, si así se desea.<br />
  65. 65. 10.- Consultas hql<br />Consultas con parámetros <br />Query q = session.createQuery("from Categoria where nombre like :pnombre order by nombre desc");<br />q.setString("pnombre", "%ad%");<br />List<Categoria> results = (List<Categoria>) q.list();<br />System.out.println("resultados devueltos : " + results.size());<br />if(results.size() > 0 ){<br /> for(Categoria c : results){<br /> System.out.println("Id : " + c.getIdCategoria());<br /> System.out.println("Nombre : " + c.getNombre());<br /> }<br />}<br />
  66. 66. 10.- Consultas hql<br />Resultados escalares<br />Iterator results = sess.createQuery(<br />"select cat.color, min(cat.birthdate), count(cat) from Cat cat " +<br /> "group by cat.color")<br /> .list()<br /> .iterator();<br />while ( results.hasNext() ) {<br /> Object[] row = (Object[]) results.next();<br />Color type = (Color) row[0];<br />Date oldest = (Date) row[1];<br />Integer count = (Integer) row[2];<br /> .....<br />}<br />
  67. 67. 10.- Consultas hql<br />Filtrado por conjunto de valores<br />//named parameter list<br />List names = new ArrayList();<br />names.add("Izi");<br />names.add("Fritz");<br />Query q = sess.createQuery(<br />"from DomesticCat cat where cat.name in (:namesList)");<br />q.setParameterList("namesList", names);<br />List cats = q.list();<br />
  68. 68. 10.- Consultas sql Nativas<br />Externalización de consultas en ficheros<br />Se pueden definir consultas HQL y almacenarlas en un fichero asignandoles un nombre a cada una de ellas y estableciendo el mapping dentro del Hibernte.cfg.xml como si fuera el mapeo de una clase.<br /><hibernate-mapping><br /><query name="CategoriasPorNombre"><![CDATA[<br />from Categoria where nombre like :pnombre order by nombredesc<br />]]></query><br /></hibernate-mapping><br />Query q = session.getNamedQuery("CategoriasPorNombre");<br />q.setString("pnombre", "%ad%");<br />List<Categoria> results = (List<Categoria>) q.list();<br />
  69. 69. 10.- Consultas nativas sql<br />createSQLQuery<br />Se pueden definir consultas HQL y almacenarlas en un fichero asignandoles un nombre a cada una de ellas y estableciendo el mapping dentro del Hibernte.cfg.xml como si fuera el mapeo de una clase.<br />Las consultas sql tambien pueden ser externalizadas y tener parametros.<br />Listcats = session.createSQLQuery(<br /> "SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex}, " +<br /> "{cat}.MATE AS {cat.mate}, {cat}.SUBCLASS AS {cat.class}, ... " +<br /> "FROM CAT {cat} WHERE ROWNUM<10",<br /> "cat",<br />Cat.class<br />).list()<br />
  70. 70. 11.- caché<br />La caché es un mecanismo que nos permite almacenar nuestras estructuras de datos en memoria, evitándonos volver a buscar nuevamente los datos en la BBDD que además se puede compartir con otros sistemas.<br />El usuario consulta<br />Si la aplicación la tiene en caché se devuelven los datos directamente.<br />Si la aplicación NO la tiene la recupera de la fuente de datos asociada, la almacena en caché y devuelve los datos.<br />Presenta problemas de inconsistencia de datos cuando hay mas de una caché con los mismos datos cargados ya que podrían cambiar sin que una de las caches se entere.<br />
  71. 71. 11.- caché<br />Ofrece una caché de dos niveles (L1 y L2), donde solo el primero es obligatorio.<br />También incluye una caché de consultas, pudiendo obtener rápidamente resultados que hayan sido consultados previamente.<br />
  72. 72. Presentación<br />Interpretación<br />Servicios<br />Spring Framework<br />IoC, AOP<br />Integración<br />12.- hibernate y spring<br />Arquitectura de aplicaciones Spring con Hibernate<br />JSP/ JSF / Struts / Spring MVC<br />Managers – Classes Java<br />Orientación a Aspectos<br />Services – Classes Java<br />Hibernate<br />Wrappers<br />JAAS<br />PL/SQL<br />LDAP<br />Relational<br />DDBB<br />
  73. 73. 12.- hibernate y spring<br />Diseño Spring con Hibernate<br />Manager / Delegate<br /><<interfaz>><br />Service<br />Service Impl<br />Spring<br /><<interfaz>><br />DAO<br />HibernateDaoSupport<br />DAO Impl<br />Modelo / POJOs<br />Ficheros de mapping<br />Hibernate<br />
  74. 74. 12.- hibernate y spring<br />Administra la SessionFactory y la Session.<br />Administración declarativa de transacciones en contenedores ligeros.<br />Fácil de testear (se puede añadir una SessionFactory vía ficheros XML)<br />Pocas lineas de código (enfocado más en el negocio)<br />Modulo Spring ORM : Soporte para Hibernate<br />
  75. 75. 12.- hibernate y spring<br />HibernateTemplate<br />Proporcionado por Spring<br />Hibernate AOP<br />Los DAO necesitan extender de HibernateDAOSupport<br />Los métodos de los DAO son limpios<br />TransactionTemplate<br />Permite la ejecución de código transaccional sin necesidad de re-implementar los workflows<br />Ejecuta rollbacks si los callbacks originan alguna excepción<br />TransactionInterceptor<br />Los bussines objects no necesitan ser conscientes de las transacciones.<br />Soporta excepciones checked y unchecked<br />Modulo Spring ORM : Soporte para Hibernate<br />
  76. 76. 12.- hibernate y spring<br />Session session = HibernateUtil.getSessionFactory().getCurrentSession();<br />session.beginTransaction();<br />try<br />{<br /> session.saveOrUpdate(timesheet);<br /> session.getTransaction().commit();<br />}<br />catch (HibernateException e)<br />{<br /> session.getTransaction().rollback();<br /> throw e;<br />}<br />getHibernateTemplate().saveOrUpdate(timesheet);<br />Modulo Spring ORM : Soporte para Hibernate<br />
  77. 77. 13.- Logging<br />Modo Debug activado<br />
  78. 78. Parte prácticahibernate 3.2<br />
  79. 79. Instalación<br />Tenemos que descargarlo de http://www.hibernate.org/<br />Hay que colocar sus JARs dentro del directorio LIB de nuestra aplicación.<br />Los ficheros de configuración de cada clase deben ir acompañando a sus fuentes (src......)<br />Debemos colocar el fichero de configuración de Hibernate hibernate.cfg.xml en la raíz del directorio src<br />
  80. 80. Utilización – Ejemplo simple<br />Pasos<br />Crear una tabla en la base de datos<br />Clase equivalente en código java<br />Crear el fichero de mapeo, los cuales indican la correspondencia entre los atributos de la clase y los de la tabla de la base de datos.<br />Código Java de utilización del API de Hibernate.<br />
  81. 81. Utilización – Ejemplo simple<br />Creación de la tabla en la base de datos.CREATE TABLE persona (id VARCHAR(32) NOT NULL PRIMARY KEY, edad INTEGER NOT NULL, nombre VARCHAR(255) NOT NULL);<br />
  82. 82. Utilización – Ejemplo simple<br />La clase persistente<br />
  83. 83. Utilización – Ejemplo simple<br />Fichero de mapeo Persona.hbm.xml, ubicado en el mismo directorio que la clase compilada. <br />
  84. 84. Utilización – Ejemplo simple<br />Código Java de utilización del API de Hibernate<br />Insertando en la base de datos <br />Recuperando un objeto por su identificador <br />
  85. 85. Jboss ide - hibernate tools<br />Una herramienta útil para hacer proyectos Hibernate es Hibernate-Tools, que viene incorporada dentro de JBossIDE<br />El update-site de eclipse es:<br />http://download.jboss.org/jbosstools/updates/stable/<br />Diapositivas con un el desarrollo de un proyecto de persistencia.<br />
  86. 86. - FIN -<br />Licensed under Creative Commons Attribution 3<br />

×