Spring&Hibernate

1,279 views

Published on

How to create a web application using Spring & Hibernate Frameworks.

1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
1,279
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
50
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Spring&Hibernate

  1. 1. Spring Core and Hibernate on Myeclipse Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  2. 2. Introduction Autor: José Said Olano García Correo: josesaid@gmail.com http://java4said.blogspot.com SCJA, SCJP, SCWCD, SCBCD, SCMAD Espero esto te sirva como una guía para ayudarte en la creación de una aplicación simple que usa Spring y Hibernate. Este pequeño pero útil manual nos ayudará a comprender cómo se realiza una aplicación usando: · PostgreSQL como manejador de base de datos. · Spring framework para la capa de DAO y las operaciones de acceso a la BD. · Hibernate Framework como Mapeador de Objetos Relacional (ORM). Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  3. 3. Configurando nuestra BD Los siguientes son los pasos para configurar nuestra Base de Datos. · Crear la Base de datos · Crear las secuencias necesarias · Crear las tablas necesarias. System requirements Dentro de los requerimientos que tendrá nuestra aplicación Spring & Hibernate están: · PosgreSQL 8.4 descargable de la página http://www.postgresql.org/download/ · Spring framework (Será agregado como una de las capacidades de nuestro proyecto Java) Pueden ver más información de este en su página: http://www.springsource.org · Hibernate 3.2 framework (Será agregado como una de las capacidades de nuestro proyecto Java) http://www.hibernate.org/ Instalando la BD Lo primero que tenemos que hacer es arrancar nuestro manejador postgreSQL. Usando el programa pgAdmin III: Después debemos crear nuestra base de datos: Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  4. 4. Para hacerlo las instrucciones son las siguientes: 1. Acceder a nuestro servidor de Base de Datos (BD). 2. Click derecho y elegir la opción new Database. 3. Posteriormente, asignarle un nombre a la BD. 4. Click en el botón Aceptar Creando nuestra tabla Para crear nuestra tabla debemos hacer lo siguiente: 1. Crear la secuencia correspondiente para cada registro. 2. Crear la tabla deseada y en su campo id agregarle el valor nextval ('nombreDeLaSecuencia'). Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  5. 5. Veamos como se hace: Creación de una secuencia. 1. Establecerle un nombre. 2. Establecer el incremento para cada registro 3. Asignar el valor de inicio de la secuencia. Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  6. 6. Creación de nuesta tabla que usa la secuencia. Para crear nuestra tabla: 1. Debemos ponerle un nombre. 2. Ir a la pestaña SQL y desactivar la opción: Read Only 3. Ahi podemos escribir definir manualmente nuestro comando DDL. 4. Ojo: en nuestro campo id debemos poner el tipo de dato, si es o no null, la palabra DEFAULT y acontinuación nextval('secuencia_persona'). 5. Esto ligará nuestra secuencia con nuestro database field. Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  7. 7. Al finalizar, nos debe quedar un Script como el siguiente: Listo, hasta este momento sólo tenemos una tabla con su secuencia. creando una tabla detalle Creación de una tabla detalle Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  8. 8. Ahora iremos un poco más rápido. Después: y nos quedará una estructura de objetos similar a ésta: Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  9. 9. Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  10. 10. Configurando la aplicación en MyEclipse Creando la aplicación en MyEclipse En este punto usaremos Spring y Hibernate. Los pasos a seguir son: 1. Crear el proyecto Java. 2. Agregar las capacidades Spring. 3. Agregar un Driver de Base de datos (en caso de no tenerlo). 4. Agregar las capacidades Hibernate. 5. Organizar nuestro código. 6. Crear la clase de prueba Creando un proyecto Java Creación de un Java Project Les comparto una imagen de la instalación que tengo en mi pc de MyEclipse. Iniciemos.. Click Derecho y elegir Java Project Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  11. 11. Después: · Asignarle un nombre al proyecto. · Elegir la versión de JDK que usaremos. Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  12. 12. Y nos debe quedar esta estructura de archivos: Listo hemos creado un simple proyecto Java vacio. Agregando Spring Agregando Spring Framework a nuestro proyecto. Ahora veremos como se agrega soporte Spring a nuestro proyecto vacio java. Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  13. 13. Los pasos son los siguientes: 1. Click derecho sobre nuestro proyecto. 2. Ir a la opción MyEclipse. 3. Elegir la opción: Add Spring Capabilities Elegir: · Spring 2.5 AOP · Spring 2.5 Core Libraries · Spring 2.5 Persistence Core Libraries Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  14. 14. Desmarcar la opción: Enable AOP builder Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  15. 15. Ahora debe quedarnos la siguiente estructura de archivos: Listo, ahora nuestro proyecto ya tiene las librerias Spring instaladas. Agregando Spring Agregando Hibernate Framework a nuestro proyecto. Ahora veremos como se agrega soporte Hibernate a nuestro proyecto Java. Los pasos son los siguientes: 4. Click derecho sobre nuestro proyecto. 5. Ir a la opción MyEclipse. 6. Elegir la opción: Add Hibernate Capabilities Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  16. 16. Activar la opción · Dejar activas las opciones que ya se encuentran seleccionadas · Hibernate 3.2 Advanced Support Libraries. Nos debe quedar algo así: Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  17. 17. Elegir la opción: Hibernate configuration file (hibernate.cfg.xml) Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  18. 18. Escribir algún nombre para nuestra clase SessionFactory a crear: El siguiente paso es elegir nuestro Driver de BD. Nota: La primera vez no se cuenta con DB Drivers. Para Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  19. 19. agregar uno vea el tema: Agregar un DB Driver. La siguiente pantalla nos solicitará el nombre de nuestra SessionFactory: Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  20. 20. Lo unico que haremos es crear un paquete para tener más ordenado nuestro código fuente. Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  21. 21. La siguiente imagen nos muestra cómo es que queda la última pantalla del asistente: Por ultimo presionamos Finish Ahora debe quedarnos la siguiente estructura de archivos: Listo, ahora nuestro proyecto ya tiene las librerias Hibernate instaladas. Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  22. 22. Mapeo de DB a Java Mapeo de la Base de datos a Clases Java. Para poder trabajar haciendo uso de Spring y Hibernate ( ya configurados previamente), lo que debemos de hacer es lo siguiente: · En la pestaña DB Browser elegir la tabla que deseamos mapear a clase de Java. · Después elegir la opción: Hibernate Reverse Engineering IMPORTANTE CUANDO TENGAMOS ESTA PANTALLA: Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  23. 23. DEBEREMOS CREAR UN NUEVO PAQUETE PARA TODO LO QUE GENERAREMOS, por ejemplo: Ahora si podemos continuar con las demás instrucciones. Tenemos que dejar activas las opciones: · Create POJO<>DB Table mapping information · *Create a hibernate mapping file (*.hbm.xml for each database table) · * Update Hibernate configuration with mapping resource location. · Java Data Object <>DB Table · *Create abstract class Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  24. 24. · Java Data Access Object (DAO) (Hibernate only) · *Generate precise findBy methods Y POR ULTIMO: · DAO Type: Basic DAO En la siguiente página deberemos elegir en el campo Id Generator: Sequence Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  25. 25. En la siguiente página debemos 1.- Elegir el correcto IdGenerator: sequence para cada tabla. Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  26. 26. De modo que quede de la siguiente manera: Lo mismo para la siguiente tabla: Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  27. 27. 2.- Activar las 2 cajas de verificación: · Include referenced tables (A->B) · Include referencing tables (A<-B). ASI MISMO COMO LAS 2 OPCIONES INFERIORES: · Generate support for ListedTable(fk)->UnlistedTable · Generate support for UnListedTable(fk)->ListedTable Quedando de la siguiente manera: Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  28. 28. Eso nos tuvo que generar un esquema de archivos como este: Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  29. 29. Organizando el código Organizando el código de una manera más ordenada podrías quedar así: Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  30. 30. Creando nuestra clase Demo.java Clase Demo Para crear la clase que nos permitirá interactuar directamente sobre nuestra BD debemos dar click derecho sobre nuestra proyecto Java, luego elegir la opción New, después Class Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  31. 31. En la pantalla bastará que: · Elijamos un paquete · Nombre a nuestra clase · Generemos un método main. Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  32. 32. Su código es el siguiente: /** * */ package com.mx.josesaid.tester; import java.util.Calendar; import org.hibernate.Transaction; import com.mx.josesaid.codigo.dao.PersonaDAO; import com.mx.josesaid.codigo.pojos.Persona; import com.mx.josesaid.fabrica.HibernateSessionFactory; /** * @author Administrator * */ public class DemoMainClass { Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  33. 33. /** * @param args */ public static void main(String[] args) { Transaction tx = HibernateSessionFactory.getSession() .beginTransaction(); PersonaDAO personaDao = new PersonaDAO(); Persona p = new Persona(); p.setNombre("jose said"); // p.setId(-1); p.setApellidopaterno("Olano"); p.setApellidomaterno("Garcia"); p.setEdad(27); java.sql.Timestamp fecha = new java.sql.Timestamp(Calendar .getInstance().getTime().getTime()); p.setFechanacimiento(fecha); personaDao.save(p); tx.commit(); HibernateSessionFactory.getSession().close(); System.out.println("listo"); } } Este código tiene un detalle --> AL momento de insertar el registro nos mostrará un error: Esto debido a que en el Id Generator de cada tabla escribimos el valor sequenced. Para corregirlo tenemos 2 opciones: 1. Crear en postgreSQL la secuencia hibernate_sequence: C REATE SEQUENC E hibernate_sequence INC REMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 C AC HE 1; 2. ó en su defecto modificar cada uno de nuestros archivos hbm.xml y en el tag <generator Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  34. 34. class="sequence"></generator> escribir el nombre de la secuencia como lo muestro abajo de manera correcta. FRAGMENTO ERRONEO: <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="sequence"></generator> </id> FRAGMENTO CORRECTO: <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="sequence"> <param name="sequence">secuencia_direccion</param> </generator> </id> Una vez corregidos estos detalles ahora si podremos perctarnos que todo salió correcto: Ahora veamos en la base de datos como quedó insertado nuestro registro... ¿Que pasa si ejecutamos nuevamente nuestro código Java? R = Obtenemos el siguiente error: Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  35. 35. El cual nos dice que hay una violación al UNIQUE CONSTRAINT para el campo nombre, ya que como recordaremos lo declaramos unico en nuestra base de datos, si no recuerdas observa: Saludos.... Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  36. 36. Apendices Agregar un DB Driver en MyEclipse Cómo agregar un DB Driver en MyEclipse. Veamos como se hace: Dar click en el icono: para que nos despliegue una lista, de la cual seleccionaremos la opción: MyEclipse Database Explorer Esto nos habilitará la pestaña en el IDE llamada DB Browser, en ésta damos click derecho y seleccionamos la opción New Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  37. 37. y procederemos a llenar el formulario con los datos de nuestro servidor de base de datos. Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  38. 38. Luego probamos que nuestro driver sea correcto, y para finalizar veremos una pantalla como la siguiente: Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  39. 39. Esto indica que todo salió perfectamente. Archivo hibernate.cfg.xml Archivo 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"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="dialect"> org.hibernate.dialect.PostgreSQLDialect </property> <property name="connection.url"> jdbc:postgresql://localhost:5432/java </property> <property name="connection.username">postgres</property> <property name="connection.password">said</property> <property name="connection.driver_class"> org.postgresql.Driver </property> <property name="myeclipse.connection.profile"> PostgreSQL_said </property> <mapping resource="com/mx/josesaid/codigo/Persona.hbm.xml" /> <mapping resource="com/mx/josesaid/codigo/Direccion.hbm.xml" /> Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  40. 40. </session-factory> </hibernate-configuration> Archivo HibernateSessionFactory.java Archivo HibernateSessionFactory.java package com.mx.josesaid.fabrica; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.cfg.Configuration; /** * Configures and provides access to Hibernate sessions, tied to the * current thread of execution. Follows the Thread Local Session * pattern, see {@link http://hibernate.org/42.html }. */ public class HibernateSessionFactory { /** * Location of hibernate.cfg.xml file. * Location should be on the classpath as Hibernate uses * #resourceAsStream style lookup for its configuration file. * The default classpath location of the hibernate config file is * in the default package. Use #setConfigFile() to update * the location of the configuration file for the current session. */ private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); private static Configuration configuration = new Configuration(); private static org.hibernate.SessionFactory sessionFactory; private static String configFile = CONFIG_FILE_LOCATION; static { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err .println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } private HibernateSessionFactory() { } /** * Returns the ThreadLocal Session instance. Lazy initialize * the <code>SessionFactory</code> if needed. * * @return Session * @throws HibernateException */ public static Session getSession() throws HibernateException { Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) { if (sessionFactory == null) { Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  41. 41. rebuildSessionFactory(); } session = (sessionFactory != null) ? sessionFactory.openSession() : null; threadLocal.set(session); } return session; } /** * Rebuild hibernate session factory * */ public static void rebuildSessionFactory() { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err .println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } /** * Close the single hibernate session instance. * * @throws HibernateException */ public static void closeSession() throws HibernateException { Session session = (Session) threadLocal.get(); threadLocal.set(null); if (session != null) { session.close(); } } /** * return session factory * */ public static org.hibernate.SessionFactory getSessionFactory() { return sessionFactory; } /** * return session factory * * session factory will be rebuilded in the next call */ public static void setConfigFile(String configFile) { HibernateSessionFactory.configFile = configFile; sessionFactory = null; } /** * return hibernate configuration * */ public static Configuration getConfiguration() { Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  42. 42. return configuration; } } Archivos hbm.xml NOTA: obervar que el archivo hibernate.cfg.xml en sus tags mapping resources tenga la ubicación correcta de los archivos en los paquetes que dicen estar. Inicialmente era: Pero al organizar el código y ponerlos dentro del paquete com.mx.josesaid.codigo.xml, la ruta también deberá de ser actualizadas en las líneas 24 y 25 quedando de la siguiente manera: Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator
  43. 43. es claro no? Correciones a Archivos hbm.xml De igual manera sucede con los archivos · Direccion.hbm.xml · Persona.hbm.xml Los cuales inicialmente estaban en la ruta: "com.mx.josesaid.codigo.Persona" y "com.mx.josesaid.codigo.Direccion respectivamente", que ahora pasan a estar segun el arbol de directorios YA ORGANIZADO esta nueva ruta: "com.mx.josesaid.codigo.pojos.Persona" y "com.mx.josesaid.codigo.pojos.Direccion" Created with the Freeware Edition of HelpNDoc: Free CHM Help documentation generator

×