java - hibernate where in
JPA o JDBC, ¿cómo son diferentes? (4)
Estoy aprendiendo Java EE y descargué el eclipse con glassfish por el mismo. Vi algunos ejemplos y también leí los documentos de Oracle para saber todo sobre Java EE 5. Conectarse a una base de datos fue muy simple. Abrí un proyecto web dinámico, creé una sesión EJB, utilicé EntityManager y con los métodos get pude acceder a la tabla de datos almacenados.
Para mi próximo proyecto, tuve que crear una clase simple y luego acceder a una tabla DB. El primer problema que encontré fue que el atributo PersistenceUnit solo sería reconocido por EJB, Servlet, etc. y no una simple clase java. Entonces no pude usar el modo EntityManager (¿o puedo?)
Me pidieron que fuera por el camino "JDBC". El primer problema que encontré fue conectarme con el DB. Parece que todo esto debe estar codificado. Tenía un persistence.xml con el que podía configurar fácilmente la conexión de la base de datos. Incluso configurar un controlador para la base de datos fue fácil. Además, no hay métodos get / set en el JDBC para acceder a las entidades de la tabla.
¿Cómo entiendo JPA y persistencia en relación con JDBC? ¿Para qué estaba pensado JPA? ¿Por qué hay métodos set / get? ¿Puede alguien arrojar algo de luz sobre la esencia de estos dos y cuáles son los pros / contras sin "jargons"? Sugiera también algunos enlaces. Una simple búsqueda en Google de diferencias JPA y JDBC me llevó a algunos sitios llenos de "terminología" que no podía seguir :(
JDBC es el predecesor de JPA.
JDBC es un puente entre el mundo de Java y el mundo de las bases de datos. En JDBC necesita exponer todos los detalles sucios necesarios para las operaciones CRUD, como nombres de tablas, columnas, mientras que en JPA (que usa JDBC debajo), también especifica los detalles de los metadatos de la base de datos, pero con el uso de anotaciones Java.
Entonces, JPA crea consultas de actualización para usted y administra las entidades que buscó o creó / actualizó (también hace más).
Si desea hacer JPA sin un contenedor Java EE, Spring y sus bibliotecas se pueden usar con las mismas anotaciones Java.
JDBC es una especificación de nivel mucho más bajo (y más antiguo) que JPA. En esencia, JDBC es una API para interactuar con una base de datos usando SQL puro - enviando consultas y recuperando resultados. No tiene noción de objetos o jerarquías. Al utilizar JDBC, le corresponde a usted traducir un conjunto de resultados (esencialmente una matriz de fila / columna de valores de una o más tablas de base de datos, devuelta por su consulta SQL) en objetos Java.
Ahora, para comprender y usar JDBC, es esencial que tenga un poco de conocimiento de trabajo y de SQL. Con eso también viene una visión requerida sobre qué es una base de datos relacional, cómo trabajas con ella y conceptos tales como tablas, columnas, claves y relaciones. A menos que tenga al menos una comprensión básica de las bases de datos, el SQL y el modelado de datos, no podrá hacer mucho uso de JDBC, ya que en realidad es solo una pequeña abstracción.
La principal diferencia entre JPA y JDBC es el nivel de abstracción.
JDBC es un estándar de bajo nivel para la interacción con bases de datos. JPA es un estándar de nivel más alto para el mismo propósito. JPA le permite usar un modelo de objetos en su aplicación que puede hacer que su vida sea mucho más fácil. JDBC le permite hacer más cosas directamente con la Base de datos, pero requiere más atención. Algunas tareas no se pueden resolver de manera eficiente utilizando JPA, pero se pueden resolver de manera más eficiente con JDBC.
Los terminos de Layman:
- JDBC es un estándar para el acceso a la base de datos
- JPA es un estándar para ORM
JDBC es un estándar para conectarse a un DB directamente y ejecutar SQL contra él, por ejemplo, SELECT * FROM USERS
, etc. Pueden devolverse los conjuntos de datos que puede manejar en su aplicación, y puede hacer todas las cosas habituales como INSERTAR, ELIMINAR, ejecutar procedimientos almacenados, etc. Es una de las tecnologías subyacentes detrás de la mayoría del acceso a la base de datos de Java (incluidos los proveedores de JPA).
Uno de los problemas con las aplicaciones JDBC tradicionales es que a menudo se puede tener un código malicioso donde se produce una gran cantidad de mapeos entre los conjuntos de datos y los objetos, la lógica se mezcla con SQL, etc.
JPA es un estándar para Mapeo Relacional de Objetos. Esta es una tecnología que le permite mapear objetos en códigos y tablas de bases de datos. Esto puede "ocultar" el SQL del desarrollador, de modo que todo lo que tratan son clases de Java, y el proveedor le permite guardarlos y cargarlos mágicamente. En su mayoría, los archivos de mapeo XML o anotaciones en getters, setters se pueden usar para indicarle al proveedor de JPA qué campos en su mapa de objetos corresponden a qué campos en el DB. El proveedor de JPA más famoso es Hibernate, por lo que es un buen lugar para comenzar con ejemplos concretos.
Otros ejemplos incluyen OpenJPA, toplink, etc.
Debajo del capó, Hibernate y la mayoría de los demás proveedores de JPA escriben SQL y usan JDBC para leer y escribir en el DB.