¿Qué hace JPA de manera diferente o mejor que JDBC?

Primero establezcamos los siguientes términos:

  • ORM (patrones de acceso: JPA, Hibernate, EclipseLink, OpenJPA, muchos otros)
  • SQL (patrones de acceso: JDBC, Spring JDBC, Apache DbUtils, jOOQ, muchos otros)

Los ORM se utilizan para asignar sus tablas y registros RDBMS a objetos Java. Se utilizan para transferir el estado entre su RDBMS y Java de una manera completamente transparente, eliminando el SQL, lo que es increíblemente útil una vez que CRUD se vuelve complejo. CRUD puede volverse complejo cuando, dentro de una sola transacción, desea agregar / eliminar / mejorar / vincular / desvincular docenas de entidades diferentes, lo que resulta en cientos de sentencias SELECT, INSERT, UPDATE, DELETE, evitando bloqueos innecesarios a toda costa. Para esto: utilice ORM (por ejemplo, a través de JPA).

SQL se utiliza para modelar el procesamiento de datos masivos complejos, denormalizando su esquema almacenado en varios formatos diferentes, mediante uniones, uniones, consultas jerárquicas, etc. Esto es extremadamente útil cuando se realizan consultas complejas, informes, operaciones por lotes y mucho más. Para esto: utilice SQL (por ejemplo, a través de JDBC).

Las dos API tienen diferentes propósitos. Lecturas adicionales que ilustran esta diferencia:

  • jOOQ vs. Hibernate: Cuándo elegir cuál
  • ¿Cuándo debo usar un ORM?

Si no ofreciera algo mejor, no tendríamos la API de Java Persistence. Entonces, hay una lista de áreas donde JPA e Hibernate funcionan mejor que JDBC:

  • haciendo referencia a parámetros. En JDBC, solo puede pasar los parámetros a las declaraciones mediante indexación, que comienzan desde 1. JPA ofrece parámetros con nombre y posicionales, y funcionan incluso para consultas IN, que JDBC no maneja correctamente.
  • falta de soporte de bloqueo pesimista y optimista
  • falta de soporte para transformar un ResultSet en un DTO
  • sin soporte de integración de almacenamiento en caché a nivel de aplicación
  • sin soporte para flujos / conversaciones de solicitud múltiple
  • demasiado detallado para operaciones CRUD

JDBC significa Java Database Connectivity.
Cuando se introdujo, significó estandarizar la conectividad relativa de bajo nivel a las bases de datos y proporcionó una forma unificada de manejar la respuesta de la consulta.
Sin embargo, todavía había una brecha entre el manejo del conjunto de resultados y las consultas y los objetos de modelo / dominio relacionados.
JPA (Java Persistency Api) proporciona una solución más completa a la brecha mencionada. Ofrece definiciones sobre cómo se pueden definir las consultas y cómo manejar sus resultados. De manera abstracta, uno puede ver JPA como capa ORM.

Un punto adicional a tener en cuenta es que cuando se definió JDBC, estableció un estándar que muchos siguieron e implementaron. En mi opinión, cuando JPA se definió como un estándar, ya seguía una ejecución exitosa (como hibernar) y desde entonces está luchando por ponerse al día.

Java Persistence API (JPA) es un marco ORM que lo ayuda a administrar las transacciones de la base de datos de una manera mucho más fácil en comparación con escribir las consultas SQL simples e invocar las declaraciones JDBC.

Finalmente, JDBC se usa internamente. Pero, cuando usa JDBC, debe administrar varias cosas y no hay una asignación directa a los objetos Java y las tablas de la base de datos. Vas a asignar manualmente cada archivo a las tablas. Eso lleva mucho tiempo y el mantenimiento también es difícil.

JPA lo hace de mejor manera y funciona bien.

Por ejemplo:

Tiene una clase de empleado y hay una tabla de empleados en la base de datos. Crearía un archivo de configuración que mapee tanto la tabla como la clase Java. Cuando crea un objeto y actualiza el valor, eso persiste automáticamente en la base de datos. Todo gestionado por el propio marco ORM. JPA es una especificación para marcos ORM.

Nada. Lea esto: ORM es un antipatrón ofensivo La publicación explica por qué JPA es mucho peor que un JDBC simple.

More Interesting

¿Qué nugget de oro de ingeniería de software has descubierto en Internet?

¿Por qué la Fundación Apache ha declarado que ninguno de sus nuevos proyectos de software puede incluir React.js?

¿Cuáles son algunos recursos / software útiles para desarrolladores que usan Linux?

¿Es el desarrollo de software de estilo estrella de rock sostenible o incluso saludable para la empresa y la industria?

¿Cuáles son las cinco prácticas de bloques de construcción más importantes de Agile?

¿Qué costos adicionales además del costo del software deben considerarse al seleccionar el software ERP?

¿Cómo manejan los ingenieros de software los comentarios obsoletos en el código?

Como desarrollador web que escribe código para una empresa nueva que trata con números crujientes (no tan en tiempo real como las existencias) en 2014, ¿qué debería considerar codificar?

¿Qué es un software deltek?

¿Cuáles son algunos problemas que tienen los hackatones actuales? O más bien, ¿cuáles son algunas cosas que podrían mejorarse?

Estoy trabajando como probador manual durante 1,5 años en la puesta en marcha, ahora he sido ascendido a gerente de proyecto. ¿Es recomendable tomar la promoción?

¿Qué herramienta de desarrollo, o característica de herramienta, mejoraría más su productividad y calidad?

¿Cuál es un buen ejemplo de un servicio web eng design doc?

¿Seré económicamente estable si me mudo de India a EE. UU. Durante 3 años?

¿Qué porcentaje de los presupuestos de TI generalmente se gasta en QA vs Desarrollo vs Hardware en compañías SaaS grandes y exitosas?