JDBC son las siglas de Java Database Connectivity y proporciona un conjunto de API de Java para acceder a las bases de datos relacionales desde el programa Java. Estas API de Java permiten que los programas de Java ejecuten sentencias SQL e interactúen con cualquier base de datos compatible con SQL.
ORM significa Object-Rexultante Mapping (ORM) es una técnica de programación para convertir datos entre bases de datos relacionales y lenguajes de programación orientados a objetos como Java, C #, etc.
Un sistema ORM tiene las siguientes ventajas sobre JDBC simple
No Señor. | Ventajas |
---|---|
1 | Permite que el código empresarial acceda a objetos en lugar de tablas de base de datos. |
2 | Oculta los detalles de las consultas SQL de la lógica OO. |
3 | Basado en JDBC 'bajo el capó' |
4 | No es necesario lidiar con la implementación de la base de datos. |
5 | Entidades basadas en conceptos comerciales en lugar de estructura de base de datos. |
6 | Gestión de transacciones y generación automática de claves. |
7 | Rápido desarrollo de la aplicación. |
Hay varios marcos persistentes y opciones de ORM en Java.
Beans de entidad Enterprise JavaBeans
Objetos de datos Java
Castor
TopLink
Primavera DAO
Hibernate
Hibernate es una solución Object-Relational Mapping (ORM) para JAVA y se planteó como un marco persistente de código abierto creado por Gavin King en 2001. Es un potente servicio de consulta y persistencia Object-Relational de alto rendimiento para cualquier aplicación Java.
Hibernate asigna clases de Java a tablas de bases de datos y de tipos de datos Java a tipos de datos SQL y libera al desarrollador del 95% de las tareas de programación relacionadas con la persistencia de datos comunes.
Las siguientes son las ventajas de usar Hibernate.
Hibernate se encarga de mapear las clases de Java a las tablas de la base de datos utilizando archivos XML y sin escribir ninguna línea de código.
Proporciona API sencillas para almacenar y recuperar objetos Java directamente desde y hacia la base de datos.
Si hay un cambio en la base de datos o en cualquier tabla, solo es necesario cambiar las propiedades del archivo XML.
Haga abstracción de los tipos de SQL desconocidos y proporcione la posibilidad de trabajar con objetos Java familiares.
Hibernate no requiere un servidor de aplicaciones para funcionar.
Manipula asociaciones complejas de objetos de su base de datos.
Minimice el acceso a la base de datos con estrategias de búsqueda inteligentes.
Proporciona una consulta de datos sencilla.
Hibernate admite casi todos los principales RDBMS. A continuación se muestra una lista de algunos de los motores de base de datos compatibles con Hibernate.
Motor de base de datos HSQL
DB2/NT
MySQL
PostgreSQL
FrontBase
Oracle
Base de datos de Microsoft SQL Server
Sybase SQL Server
Servidor dinámico Informix
Hibernate admite una variedad de otras tecnologías, incluidas las siguientes:
XDoclet primavera
J2EE
Complementos de Eclipse
Maven
Los siguientes son los componentes / objetos clave de Hibernate:
Configuration - Representa un archivo de configuración o propiedades requerido por Hibernate.
SessionFactory - Configura Hibernate para la aplicación utilizando el archivo de configuración suministrado y permite crear una instancia de un objeto Session.
Session - Se utiliza para obtener una conexión física con una base de datos.
Transaction - Representa una unidad de trabajo con la base de datos y la mayoría de RDBMS admite la funcionalidad de transacciones.
Query - Utiliza una cadena SQL o Hibernate Query Language (HQL) para recuperar datos de la base de datos y crear objetos.
Criteria - Se utiliza para crear y ejecutar consultas de criterios orientados a objetos para recuperar objetos.
El objeto de configuración proporciona dos componentes clave:
Database Connection- Esto se maneja a través de uno o más archivos de configuración compatibles con Hibernate. Estos archivos sonhibernate.properties y hibernate.cfg.xml.
Class Mapping Setup
Este componente crea la conexión entre las clases de Java y las tablas de la base de datos.
El objeto de configuración es el primer objeto de Hibernate que crea en cualquier aplicación de Hibernate y generalmente se crea solo una vez durante la inicialización de la aplicación. Representa un archivo de configuración o propiedades requerido por Hibernate.
El objeto de configuración se utiliza para crear un objeto SessionFactory que a su vez configura Hibernate para la aplicación utilizando el archivo de configuración suministrado y permite crear una instancia de un objeto Session. SessionFactory es un objeto seguro para subprocesos y lo utilizan todos los subprocesos de una aplicación.
SessionFactory es un objeto pesado, por lo que generalmente se crea durante el inicio de la aplicación y se guarda para su uso posterior. Necesitaría un objeto SessionFactory por base de datos usando un archivo de configuración separado. Entonces, si está utilizando varias bases de datos, entonces tendría que crear varios objetos SessionFactory.
Una sesión se utiliza para obtener una conexión física con una base de datos. El objeto Session es ligero y está diseñado para instanciarse cada vez que se necesita una interacción con la base de datos. Los objetos persistentes se guardan y recuperan a través de un objeto de sesión.
Los objetos de sesión no deben mantenerse abiertos durante mucho tiempo porque normalmente no son seguros para subprocesos y deben crearse y destruirse según sea necesario.
Una transacción representa una unidad de trabajo con la base de datos y la mayoría de RDBMS admite la funcionalidad de transacción. Las transacciones en Hibernate son manejadas por un administrador de transacciones subyacente y una transacción (de JDBC o JTA).
Este es un objeto opcional y las aplicaciones de Hibernate pueden optar por no utilizar esta interfaz, en lugar de gestionar las transacciones en su propio código de aplicación.
Los objetos de consulta utilizan una cadena SQL o Hibernate Query Language (HQL) para recuperar datos de la base de datos y crear objetos. Una instancia de consulta se utiliza para vincular parámetros de consulta, limitar el número de resultados devueltos por la consulta y, finalmente, ejecutar la consulta.
Los objetos de criterios se utilizan para crear y ejecutar consultas de criterios orientadas a objetos para recuperar objetos.
No Señor. | Propiedades y descripción |
---|---|
1 | hibernate.dialect Esta propiedad hace que Hibernate genere el SQL apropiado para la base de datos elegida. |
2 | hibernate.connection.driver_class La clase de controlador JDBC. |
3 | hibernate.connection.url La URL de JDBC a la instancia de la base de datos. |
4 | hibernate.connection.username El nombre de usuario de la base de datos. |
5 | hibernate.connection.password La contraseña de la base de datos. |
6 | hibernate.connection.pool_size Limita el número de conexiones en espera en el grupo de conexiones de la base de datos de Hibernate. |
7 | hibernate.connection.autocommit Permite utilizar el modo de confirmación automática para la conexión JDBC. |
Pueden existir instancias en uno de los siguientes tres estados en un momento dado:
transient - Una nueva instancia de una clase persistente que no está asociada con una sesión y no tiene representación en la base de datos y ningún valor identificador es considerada transitoria por Hibernate.
persistent- Puede hacer que una instancia transitoria sea persistente asociándola con una sesión. Una instancia persistente tiene una representación en la base de datos, un valor identificador y está asociada con una sesión.
detached - Una vez que cerramos la sesión de Hibernate, la instancia persistente se convertirá en una instancia separada.
El método Session.beginTransaction comienza una unidad de trabajo y devuelve el objeto Transaction asociado.
Session.createCriteria crea una nueva instancia de Criteria, para la clase de entidad dada, o una superclase de una clase de entidad.
Session.createQuery crea una nueva instancia de Query para la cadena de consulta HQL dada.
Session.createSQLQuery crea una nueva instancia de SQLQuery para la cadena de consulta SQL dada.
Session.delete elimina una instancia persistente del almacén de datos.
Session.get devuelve la instancia persistente de la entidad nombrada dada con el identificador dado, o nulo si no existe tal instancia persistente.
Session.refresh vuelve a leer el estado de la instancia dada de la base de datos subyacente.
Session.save guarda el estado de la instancia dada de la base de datos subyacente.
Session.update actualiza el estado de la instancia dada desde la base de datos subyacente.
Session.saveOrUpdate guarda (Objeto) o actualiza (Objeto) la instancia dada.
Las clases de Java cuyos objetos o instancias se almacenarán en tablas de bases de datos se denominan clases persistentes en Hibernate.
Existen las siguientes reglas principales de clases persistentes, sin embargo, ninguna de estas reglas es un requisito estricto.
Todas las clases de Java que se conservarán necesitan un constructor predeterminado.
Todas las clases deben contener una ID para permitir una fácil identificación de sus objetos dentro de Hibernate y la base de datos. Esta propiedad se asigna a la columna de clave principal de una tabla de base de datos.
Todos los atributos que se conservarán deben declararse privados y tener getXXX y setXXX métodos definidos en el estilo JavaBean.
Una característica central de Hibernate, los proxies, depende de que la clase persistente sea no final o de la implementación de una interfaz que declare todos los métodos públicos.
Todas las clases que no extienden o implementan algunas clases e interfaces especializadas requeridas por el marco EJB.
Las asignaciones de objeto / relacional se definen generalmente en un documento XML. Este archivo de mapeo le indica a Hibernate cómo mapear la clase o clases definidas a las tablas de la base de datos. Debemos guardar el documento de mapeo en un archivo con el formato <classname> .hbm.xml.
El documento de mapeo es un documento XML que tiene <hibernate-mapping> como el elemento raíz que contiene todos los elementos <class>.
los <class>Los elementos se utilizan para definir asignaciones específicas de clases Java a las tablas de la base de datos. El nombre de la clase Java se especifica mediante elname atributo del elemento de clase y el nombre de la tabla de la base de datos se especifica utilizando el table atributo.
los <id>El elemento asigna el atributo de ID único en la clase a la clave principal de la tabla de la base de datos. losname atributo del elemento id se refiere a la propiedad en la clase y el columnEl atributo se refiere a la columna de la tabla de la base de datos. lostype El atributo contiene el tipo de mapeo de hibernación, estos tipos de mapeo se convertirán del tipo de datos Java a SQL.
los <generator>El elemento dentro del elemento id se utiliza para generar automáticamente los valores de clave primaria. Selecciona elclass atributo del elemento generador se establece en native para dejar que hibernate retome identity, sequence o hilo algoritmo para crear la clave principal en función de las capacidades de la base de datos subyacente.
los <property>El elemento se utiliza para asignar una propiedad de clase Java a una columna en la tabla de la base de datos. losname atributo del elemento se refiere a la propiedad en la clase y el columnEl atributo se refiere a la columna de la tabla de la base de datos. lostype El atributo contiene el tipo de mapeo de hibernación, estos tipos de mapeo se convertirán del tipo de datos Java a SQL.
Esto se asigna con un elemento <set> y se inicializa con java.util.HashSet.
Esto se asigna con un elemento <set> y se inicializa con java.util.TreeSet. El atributo de clasificación se puede establecer en un comparador o en un orden natural.
Esto se asigna con un elemento <list> y se inicializa con java.util.ArrayList.
Esto se asigna con un elemento <bag> o <ibag> y se inicializa con java.util.ArrayList.
Esto se asigna con un elemento <map> y se inicializa con java.util.HashMap.
Esto se asigna con un elemento <map> y se inicializa con java.util.TreeMap. El atributo de clasificación se puede establecer en un comparador o en un orden natural.
Una asociación de varios a uno es el tipo de asociación más común en el que un objeto se puede asociar con varios objetos. Por ejemplo, un mismo objeto de dirección se puede asociar con varios objetos de empleado.
El elemento <many-to-one> se utiliza para definir la asociación de varios a uno. El atributo de nombre se establece en la variable definida en la clase principal. El atributo de columna se utiliza para establecer el nombre de la columna en la tabla principal.
Una asociación de uno a uno es similar a una asociación de varios a uno con la diferencia de que la columna se establecerá como única. Por ejemplo, un objeto de dirección se puede asociar con un solo objeto de empleado.
El elemento <many-to-one> se utiliza para definir la asociación uno a uno. El atributo de nombre se establece en la variable definida en la clase principal. El atributo de columna se utiliza para establecer el nombre de la columna en la tabla principal, que se establece en único para que solo un objeto pueda asociarse con otro objeto.
En la asociación de mapeo de uno a varios, un objeto se puede asociar con varios objetos. Por ejemplo, el objeto Empleado se relaciona con muchos objetos Certificado.
Se puede implementar una asignación de uno a varios utilizando una colección de Java Set que no contiene ningún elemento duplicado.
El elemento <one-to-many> del elemento set indica que un objeto se relaciona con muchos otros objetos.
Un mapeo Many-to-Many se puede implementar usando una colección de Java Set que no contiene ningún elemento duplicado.
El elemento <many-to-many> indica que un objeto se relaciona con muchos otros objetos y los atributos de columna se utilizan para vincular la columna intermedia.
Sí, SessionFactory es seguro para subprocesos y varios subprocesos pueden acceder a él simultáneamente.
No, la sesión no es segura para subprocesos.
session.save guarda el objeto y devuelve el id de la instancia, mientras que persist no devuelve nada después de guardar la instancia.
Existen las siguientes diferencias entre los métodos get () y load ().
get () devuelve nulo si no hay datos presentes, mientras que la carga arroja una excepción ObjectNotFoundException en tal caso.
get () siempre llega a la base de datos, mientras que el método load () no llega a la base de datos.
get () devuelve el objeto real mientras que load () devuelve el objeto proxy.
Una característica central de Hibernate, los proxies, depende de que la clase persistente sea no final o de la implementación de una interfaz que declare todos los métodos públicos.
Todas las clases que no extienden o implementan algunas clases e interfaces especializadas requeridas por el marco EJB.
La carga diferida es una técnica en la que los objetos se cargan según la demanda. Desde Hibernate 3, la carga diferida está habilitada de forma predeterminada para que los objetos secundarios no se carguen cuando se carga el padre.
HQL son las siglas de Hibernate Query Language. Toma objetos java de la misma manera que SQL toma tablas. HQL es un lenguaje de consulta orientado a objetos y es independiente de la base de datos.
El caché de primer nivel es el caché de sesión y es un caché obligatorio a través del cual deben pasar todas las solicitudes. El objeto Session mantiene un objeto bajo su propio poder antes de enviarlo a la base de datos.
La caché de segundo nivel es una caché opcional y la caché de primer nivel siempre se consultará antes de intentar localizar un objeto en la caché de segundo nivel. La caché de segundo nivel se puede configurar por clase y por colección y es principalmente responsable de almacenar en caché los objetos entre sesiones.
Hibernate también implementa un caché para conjuntos de resultados de consultas que se integra estrechamente con el caché de segundo nivel.
Esta es una característica opcional y requiere dos regiones de caché físicas adicionales que contienen los resultados de la consulta en caché y las marcas de tiempo cuando una tabla se actualizó por última vez. Esto solo es útil para consultas que se ejecutan frecuentemente con los mismos parámetros.
Una estrategia de concurrencia es un mediador que se encarga de almacenar elementos de datos en la caché y recuperarlos de la caché. Si va a habilitar una caché de segundo nivel, tendrá que decidir, para cada clase y colección persistente, qué estrategia de concurrencia de caché utilizar.
Transactional - Utilice esta estrategia para datos de lectura mayoritaria donde es fundamental evitar datos obsoletos en transacciones simultáneas, en el raro caso de una actualización.
Read-write - Utilice nuevamente esta estrategia para datos de lectura mayoritaria donde es fundamental evitar datos obsoletos en transacciones simultáneas, en el raro caso de una actualización.
Nonstrict-read-write- Esta estrategia no garantiza la coherencia entre la caché y la base de datos. Utilice esta estrategia si los datos casi nunca cambian y una pequeña probabilidad de datos obsoletos no es una preocupación crítica.
Read-only- Una estrategia de concurrencia adecuada para datos que nunca cambian. Úselo solo como datos de referencia.
Lo que sigue ?
Además, puede repasar las asignaciones anteriores que haya realizado con el tema y asegurarse de poder hablar con confianza sobre ellas. Si está más fresco, el entrevistador no espera que responda preguntas muy complejas, sino que debe hacer que sus conceptos básicos sean muy sólidos.
En segundo lugar, realmente no importa mucho si no pudo responder algunas preguntas, pero es importante que lo que sea que haya respondido, debe haberlo respondido con confianza. Así que siéntete seguro durante tu entrevista. En tutorialspoint le deseamos la mejor suerte para tener un buen entrevistador y todo lo mejor para su futuro. Salud :-)