Beruflich Dokumente
Kultur Dokumente
UNIDAD 6
ACCESO A BASE DE DATOS
HIBERNATE. 1ERA PARTE
INTRODUCCION
Los objetos usados en aplicaciones JAVA mantienen su estado y comportamiento mientras la
aplicacin se halle en ejecucin.
Generalmente se necesita mantener el estado y comportamiento de los objetos utilizados en la
aplicacin cuando la aplicacin no se est ejecutando en memoria.
Al proceso de mantener el estado y comportamiento de los objetos cuando la aplicacin no se halla
en ejecucin se denomina PERSISTENCIA DE OBJETOS.
La persistencia de los objetos con JAVA se puede realizar de diversas formas:
48
Ariel Alejandro Vega
UNIDAD 6
ACCESO A BASE DE DATOS
HIBERNATE. 1ERA PARTE
ellos existen soluciones similares. Estas soluciones similares fueron probadas por muchos
programadores y derivaron en el nombre de patrones de diseo.
El problema que viene a resolver DAO es el de contar con diversas fuentes de datos (base de datos,
archivos, servicios externos, etc.). De tal forma que se encapsula la forma de acceder a la fuente de
datos. Este patrn surge histricamente de la necesidad de gestionar una diversidad de fuentes de
datos, aunque su uso se extiende al problema de encapsular no slo la fuente de datos, sino adems
ocultar la forma de acceder a los datos. Se trata de que el software cliente se centre en los datos que
necesita y se olvide de cmo se realiza el acceso a los datos o de cul es la fuente de
almacenamiento.
Las aplicaciones pueden utilizar el API JDBC para acceder a los datos de una base de datos
relacional. Este API permite una forma estndar de acceder y manipular datos en una base de datos
relacional. El API JDBC permite a las aplicaciones JAVA utilizar sentencias SQL, que son el mtodo
estndar para acceder a tablas y vistas.
La idea de este patrn es ocultar la fuente de datos y la complejidad del uso de JDBC a la capa de
presentacin o de negocio (en pocas palabras separar las clases que realizan la conexin y las
transacciones en la base de datos, de las clases que reciben o gestionan la informacin,
colocndolas en otra capa)
Un DAO define la relacin entre la lgica de presentacin y la del modelo de clases dominio por una
parte y por otra los datos. El DAO tiene un interfaz comn, sea cual sea el modo y fuente de acceso a
datos.
La clase Client representa a una aplicacin cualquiera que necesita la informacin de una o
varias tablas de la base de datos.
La clase DataAccessObject es la encargada de realizar las transacciones SQL usando en
este caso JDBC. Las sentencias SQL se hallan en mtodos de esta clase (por ejemplo:
update(), delete(), insert(), getAll())
El DataSource representa la fuente de datos, es decir puede representar una o varias
tablas a las cuales el DataAccessObject accede por medio de sus mtodos para realizar la
transaccin.
La interfaz InterfazDAO define un contrato con DataAccessObject para determinar cules
mtodos puede poseer este ltimo.
TransferObject es la clase JAVA por medio de la cual podremos obtener los valores desde el
DataSource, o para agregar o modificar clases en el DataSource. Ambas operaciones sern
realizadas por el DataAccessObject.
Algunas caractersticas:
49
Ariel Alejandro Vega
UNIDAD 6
ACCESO A BASE DE DATOS
HIBERNATE. 1ERA PARTE
El TransferObject
erObject encapsula una unidad de informacin de la fuente de datos. El ejemplo
sencillo es entenderlo como un "bean de tabla", es decir, como una representacin de una
tabla de la base de datos, por lo que representamos las columnas de la tabla como atributos
atribu
del TransferObject. El DAO crea un TransferObject (o una coleccin de ellos) como
consecuencia de una transaccin contra la fuente de datos.
Por ejemplo, supongamos que tenemos una tabla de CLIENTES y queremos realizar una consulta de
todos los clientes
es registrados en nuestra aplicacin.
La aplicacin actuara
a como una clase Client.
Client
Client (la aplicacin) posee una clase JAVA que se llama Cliente, cuyos atributos
representan los campos de la tabla CLIENTES.
La clase Cliente actuara como la clase TransferObject
TransferObject y la tabla CLIENTES como un
DataSource
Nosotros creamos una Interfaz que se llame ClienteDAO que posea el mtodo abstracto que
devuelva una lista de objetos TransferObject (Cliente). Es decir que ese mtodo devuelve
tantos TransferObject como registros
r
posea el DataSource (CLIENTES).
Luego creamos una clase llamada ClienteDAOImp que implementa la interfaz ClienteDAO,
por lo tanto OBLIGATORIAMENTE debe poseer el mtodo que devuelve todos los objetos
ob
TransferObject (Cliente) que posee el DataSource
DataSourc (CLIENTES).
En conclusin este mtodo posee toda la lgica para acceder a la base de datos y realizar
una sentencia SQL sobre el DataSource (CLIENTES)
La clase ClienteDAOImp entonces acta como el objeto DataAccessObject
Entonces, Client solicita a ClienteDaoImp
ClienteDaoImp que ejecute el mtodo que devuelve una lista de
objetos Cliente. Ese mtodo usar JDBC para acceder a la tabla CLIENTES por medio de
una sentencia SQL y los registros devueltos los expresar como objetos Cliente que se
agregarn a la lista de objetos.
objetos. Una vez finalizado esto, la lista de objetos Cliente es
mostrada por ejemplo en una tabla de la aplicacin
50
Ariel Alejandro Vega
UNIDAD 6
ACCESO A BASE DE DATOS
HIBERNATE. 1ERA PARTE
Poseer a mano el nombre del DRIVER y la URL para la conexin: Cuando se descarga el
driver JDBC de una base de datos
datos es importante descargar tambin la documentacin. En
dicha documentacin se hallan estos dos elementos necesarios. El nombre del Driver nos
sirve para el proceso de registracin y uso de la biblioteca del DRIVER (que sern
posteriormente explicados con mayor profundidad). La URL es un cadena de caracteres que
representa el origen de datos (protocolo, puerto, nombre del servidor de datos, versin, etc.).
etc.)
Como se mencion antes cada fabricante provee su propio DRIVER JDBC por lo tanto
resulta que todos los DRIVERS poseen distintos nombre y URL.
Una vez que tenemos generados un proyecto debemos seleccionarlo y acceder a la opcin
Propiedades (properties). All elegimos la categora bibliotecas (libraries). Luego seleccionamos el
botn Agregar JAR/Carpeta (Add JAR/Folder) y entonces seleccionar la ubicacin del DRIVER JDBC
Paso 2: Crear los objetos TransferObject como clases del paquete modelo.dominio
Es comn que las clases que representan
representan TransferObject sean las clases importantes de la
aplicacin. Generalmente tambin son las clases que gestionar la lgica de negocio (que es lo que
hace nuestra aplicacin).
En JAVA tambin es comn que las clases que gestionan la lgica de negocio se coloquen en el
paquete modelo.dominio ya que el paquete modelo representa la capa de la lgica de negocio de la
aplicacin, y las clases que estn en el paquete dominio indican que son clases importantes dentro
de la lgica de negocio.
Por lo tanto si nos basamos en la tabla CLIENTES (el DataSource) nosotros necesitamos un
TransferObject que se llame Cliente que represente la tabla CLIENTES.
Un requisito importante para trabajos posteriores es que todos los atributos sean propiedadades (es
decir deben poseer mtodos get() y set()).
Por otro lado para el caso de los atributos que sean fechas, debemos usar la clase java.util.Date
como su tipo de datos.
51
Ariel Alejandro Vega
UNIDAD 6
ACCESO A BASE DE DATOS
HIBERNATE. 1ERA PARTE
Paso 3: Crear las clases TransferObject como clases del paquete dao.imp
Necesitamos crear una clase que implemente la interfaz ClienteDAO y que describa el
comportamiento que realizar el mtodo getAll().
Estas clases generalmente se colocan en el paquete imp para separarlas de las interfaces DAO.
Para este caso necesitamos una clase que denominaremos ClienteDAOImp para indicar que es la
implementacin de la interfaz ClienteDAO, por otro lado Netbeans nos obligar a que esta clase
posea el mtodo getAll().
52
Ariel Alejandro Vega
UNIDAD 6
ACCESO A BASE DE DATOS
HIBERNATE. 1ERA PARTE
53
Ariel Alejandro Vega
UNIDAD 6
ACCESO A BASE DE DATOS
HIBERNATE. 1ERA PARTE
Crear las sentencias SQL y ejecutarlas: Para ello JDBC nos provee una clase llamada
PreparedStatement a la cual le pasamos la sentencia SQL a ejecutar por medio de la clase
Connection.
54
Ariel Alejandro Vega
UNIDAD 6
ACCESO A BASE DE DATOS
HIBERNATE. 1ERA PARTE
Lo que se hace es recorrer el ResultSet. Para ello usamos el mtodo next() que avanza
sobre un registro del ResultSet y adems devuelve true si an le quedan registros.
Para obtener el valor de un campo de un registro se utiliza el nombre del campo de la
TABLA/S consultada/s y se utiliza el mtodo getTIPO_DE_DATO().
Por ejemplo si queremos obtener el campo cli_nombre, sabemos que este es un
VARCHAR2, por lo tanto el mtodo a usar es getString(cli_nombre)
Nota Importante 1: Hay algunos tipos de datos que no existen en el get(). Por ejemplo no
tenemos un getInteger(), pero si tenemos un getInt() que devuelve el entero primitivo,
entonces usando los WRAPPERS lo convertimos a Integer
Nota Importante 2: De la misma forma poseemos un getDate(), pero este devuelve un
objeto java.sql.Date. Si nosotros necesitamos pasarlo a java.util.Date usamos el mtodo
getTime() del objeto java.sql.Date para convertir una fecha a un long y luego lo pasamos al
constructor del objeto java.util.Date.
Nota Importante 3: Finalmente debemos cerrar el ResultSet (si lo usamos), el
PreparedStatement y el Connection. Esto es importante sino sobrecargamos de a poco la
base de datos y al final este puede colapsar.
De esta forma hemos implementado el mtodo getAll() de la clase ClienteDAOImp que realiza la
sentencia SELECT * FROM clientes que devuelve un ArrayList de objetos Cliente usando JDBC y el
patrn DAO.
A continuacin se muestra los mtodos que permiten realizar las principales transacciones SQL
sobre la tabla CLIENTES
Primero vemos como queda definida la interfaz ClienteDAO
55
Ariel Alejandro Vega
UNIDAD 6
ACCESO A BASE DE DATOS
HIBERNATE. 1ERA PARTE
Aqu la novedad es que el SELECT posee un filtro que es el cdigo del cliente. Observe que
el valor del cdigo se representa con un signo ? y luego se usa el mtodo
setTIPO_DE_DATO(posicin del ?, parmetro)
Donde
TIPO_DE_DATO: es el tipo de dato a usar
Posicin del ?: es un nmero que indica a cual ? estamos pasndole el parmetro
Parmetro: Es la variable por la cual se va a reemplazar el signo ?
INSERT INTO clientes (campos) VALUES (valores):
Aqu la novedad es que en el INSERT pasamos varios signos ? que representan los valores
a asignar. Estos valores los obtenemos de la clase. Por otro lado el mtodo para ejecutar la
sentencia SQL es executeUpdate(). Adems no utilizamos un ResultSet.
56
Ariel Alejandro Vega
UNIDAD 6
ACCESO A BASE DE DATOS
HIBERNATE. 1ERA PARTE
57
Ariel Alejandro Vega