viernes, 27 de julio de 2012

CRUD Hibernate 3 con Sql Server 2008 en NetBeans - Parte I.- Configuracion


Hibernate es un poderos framewok  de Mapeo Objeto Relacional el cual podemos implementar an la capa del Acceso a Datos. En esta ocacion les mostrare como configurarlo en el IDE de Desarrollo Netbeans.
utilizando SQL Server 2008 como manejador de Bases de datos, bueno sin  mas rodeos vamos a iniciar con la configuracion.

Requisitos


Creando la Base de Datos

Para empezar debemos tener un esquema de una base da Datos, para ello crearemos una Base de Datos llamada DVDStore a la cual a gregaremos una tabla llamada actor.
01 USE [DVDStore]
02 GO
03 
04 CREATE TABLE [dbo].[actor](
05  [actor_id] [int] IDENTITY(1,1) NOT NULL,
06  [name] [varchar](50) NULL,
07  [first_name] [varchar](50) NULL,
08  [last_name] [varchar](50) NULL,
09  [genero] [char](1) NULL,
10  [last_update] [datetime] NULL,
11  [photo] [varchar](50) NULL,
12  CONSTRAINT [PK_actor] PRIMARY KEY CLUSTERED ([actor_id] ASC ) 
 

Construyendo un nuevo Proyecto

En NetBeans creamos un nuevo proyecto Java Aplications.

  Una vez creado en Proyecto agregamos las librerias de hibernate.

 Ahora vamos a crear un nueva coneccion de Base de Datos.

en la pestaña de servicios damos click derecho sobre la opcion Bases de Datos.

Seleccionamos nueva coneccion.

En combobox Driver(controlador), seleccionamos nuevo controlador. aparecera una nueva ventana donde elegiremos el driver JDBC(sqljdbc4).

En el Combobox nos aparecera el nuevo driver agregado lo selecionamos y damos click en siguiente.

En esta ventana agregamos:

   servidor:    mi_servidor
   puerto:       1433
   Base de Datos:DVDStore
   Instancia:    sqlspress
   Usuario:      sa
   Contraseña:   *********



En nuestro Poyecto agregamos 3 paquetes:
  • bean
  • dao
  • vista
  • util
 Crearemos un archivo de configuracion de hibernate, Nuevo-> otros->hibernate->Hibernate Configuration Wizard, se le dejaremos el nombre de default. Seleccionamos la coneccion que se creo anteriormente.
01 <?xml version="1.0" encoding="UTF-8"?>
02 <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration 
03 DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
04 <hibernate-configuration>
05   <session-factory>
06     <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.
07     jdbc.SQLServerDriver</property>
08     <property name="hibernate.connection.url">jdbc:sqlserver:
09     //DESARROLLOPC\SQLEXPRESS:1433;databaseName=DVDStore</property>
10     <property name="hibernate.connection.username">admin</property>
11     <property name="hibernate.connection.password">qwert12345</property>
12     <property name="hibernate.connection.pool_size">10</property>
13     <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect<
14     /property>
15     <property name="hibernate.show_sql">true</property>
16     <property name="hibernate.current_session_context_class">thread</property>
17     <property name="hibernate.connection.autocommit">true</property>
18     <mapping resource="bean/Actor.hbm.xml"/>
19   </session-factory>
20 </hibernate-configuration>
 
A continuacion crearemos un nuevo archivo de Hibernate Reverse Engeering Wizard
Nuevo-> otros->hibernate->Hibernate Reverse Engeering Wizard
agregamos a las tablas que deseamos mapear. 
01 <?xml version="1.0" encoding="UTF-8"?>
02 <!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate 
03 Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.
04 net/hibernate-reverse-engineering-3.0.dtd">
05 <hibernate-reverse-engineering>
06   <schema-selection match-catalog="DVDStore" match-schema="dbo"/>
07   <table-filter match-name="actor"/>
08 </hibernate-reverse-engineering>
 
Sobre el paquete Bean creamos un nuevo Hibernate Mapping Files and POJOS from 
Database nos va crear las clases Bean(POJOS)
 mapeadas de las tablas que se agregaron al archivo Hibernate Reverse Engeering Wizard
  En el paquete util creamos una nueva clase Hibernateutil Nuevo-> otros->hibernate->
HibernateUtil  
 
 
 
En el paquete dao creamos una nueva clase llamada ActorDao el cual tendra un
 metodo nos retornara un ArrayList de todos los Actores del la tabla actor y otro
metodo metodo para insertar un Actor
 
01 public class ActorDao {
02 
03     public ArrayList<Actor> find() {
04 
05         ArrayList<Actor> listAct;
06         Session sess = HibernateUtil.getSessionFactory().getCurrentSession();
07         Transaction tx = sess.beginTransaction();
08         listAct = (ArrayList<Actor>) sess.createQuery("from Actor").list();
09         return listAct;
10 
11     }
12 
13     public void insert(Actor actor) {
14         Session sess = HibernateUtil.getSessionFactory().getCurrentSession();
15         Transaction tx = sess.beginTransaction();
16         sess.save(actor);
17         tx.commit();
18     }
19 }

Ahora creamos un clase de prueba llamada TestStore  donde primero insertamos un nuevo Actor y posteriormente imprimimos el nombre de todos los actores que estan en la base de datos.

01 public class TestStore {
02 
03     public static void main(String[] args) {
04         ActorDao dao = new ActorDao();
05 
06         Actor newobj = new Actor();
07         newobj.setFirstName("Joseph");
08         newobj.setLastName("Rosa");
09         newobj.setLastName("Alberth");
10         newobj.setGenero('M');
11         newobj.setLastUpdate(new Date());
12         dao.insert(newobj);
13 
14         ArrayList<Actor> listAct = dao.find();
15 for (Actor actor : listAct) {
16             System.out.println(actor.getFirstName());
17         }
18     }
19 }  

El proyecto debe quedar de esta manera.

  



En el siguiente post Realizaremos un CRUD con hibernate y sql Server 2008 con NetBeans utilizando Java Swing.

porfavor dejen sus comentarios para ir mejorando los posts y se aceptan preguntas a cerca del tema.

Saludos.


7 comentarios:

Muy bueno, el post, solo que no se inserta en la bd

Sin ofender su gran aporte, por que es muy bueno pero en dao.insert(new obj); está insertando un objeto vació.

Hola +Gilberto SIMON BARRERA no se esta insertando un objeto vacio aqui la explicacion

//se crea la instancia del objeto Actor
Actor newobj = new Actor();

//se establecer los atributos a el objeto de la clase Actor
newobj.setFirstName("Joseph");
newobj.setLastName("Rosa");
newobj.setLastName("Alberth");
newobj.setGenero('M');
newobj.setLastUpdate(new Date());

//se llama el metodo insert de pasando como parametro el //objeto creado anteriormente

dao.insert(newobj);

Saludos.

Exelente el post , muy practico y justo.Pero me tira un error de mapeo , al parecer segui todo al pie de la letra pero me tira table is not mapped.

Mándame tu proyecto y lo reviso para ver porque manda ese error

Este comentario ha sido eliminado por el autor.

excelente la ayuda hibernate brother la mejor que encontre hasta ahora

Publicar un comentario