2010-04-01 18 views
30

Estoy desarrollando una aplicación de escritorio Java pero tengo algunas confusiones al elegir una tecnología para mi capa de persistencia.Hibernate o JPA o JDBC o?

Hasta ahora, he estado usando JDBC para operaciones DB. Ahora, recientemente aprendí Hibernate y JPA, pero todavía soy un novato en estas tecnologías.

Ahora mi pregunta es ¿Qué utilizar para mi aplicación de escritorio Java a partir de los siguientes?

  • APP

  • Hibernate

  • JDBC

  • DAO

  • cualquier otra sugerencia de usted ...

Yo sé que no hay mejor opción de ellos y depende totalmente de la complejidad y los requeirements del proyecto por lo que a continuación son los requisitos de mi proyecto

  1. No es una aplicación compleja. Contiene solo 5 tablas (y 5 entidades)
  2. Quiero hacer mi código flexible para poder cambiar la base de datos más tarde fácilmente
  3. El tamaño de la aplicación debe ser lo más pequeño posible, ya que tendré que distribuirlo a mis clientes a través de internet.
  4. Debe ser de uso gratuito en el desarrollo y la distribución comercial.

==================================== EDITADO ======= =============================

En base a las siguientes respuestas, me gustaría ir con JPA para evitar escribir código SQL específico del proveedor.

pero tengo algunos problemas en la APP que se mencionan en Java Persistence API

+0

Puede que le interese esta pregunta previa mía: "Hibernate vs JPA vs JDO - pros y contras de cada uno?" http://stackoverflow.com/questions/530215/hibernate-vs-jpa-vs-jdo-pros-and-cons-of-each –

+0

También verifique http://stackoverflow.com/questions/2397016/java-jdbc- alternativas/ –

Respuesta

2

Para esta escala nada funcionará Allright. Considera también iBatis.

+0

¿podría mirar la pregunta editada? –

47

Esta es mi opinión:

  • JPA: forma Agnóstico hacer la persistencia de Java sin acoplamiento a sus clientes a Hibernate, TopLink, etc.
  • Hibernate: Una buena opción si usted tiene un modelo de objetos para asignar a.
  • JDBC: Toda la persistencia de Java se basa en esto. Nivel más bajo
  • DAO: Más de un patrón que una tecnología; Interfaz de operación CRUD.
  • iBatis: A medio camino entre JDBC (SQL sin formato) e Hibernate (ORM).
  • JDO: Java Data Objects, que es otra especificación para la persistencia de Java. (p.ej., Apache JDO)

No es una aplicación compleja. Contiene sólo 5 mesas (y 5) entidades

Cualquiera de estos funcionará, pero JDBC será el más simple. Todos los demás están construidos sobre JDBC.

Quiero hacer mi código flexible, de modo que puedo cambiar la base de datos más adelante fácilmente

Los cambios de esquema tendrá efectos similares en todas las tecnologías.

El tamaño de la aplicación debe mantenerse lo más pequeña posible como yo quiero que distribuir a mis clientes a través de internet.

El uso de JPA o Hibernate requerirá JAR que se sumarán al tamaño de su implementación. JDBC minimizará esto.

Debe ser libre de usar en el desarrollo y la distribución comercial.

Consulte las licencias de todas las tecnologías. No debería ser un problema con ninguno de ellos.

FYI: Es posible escribir una interfaz DAO genérico:

package persistence; 

import java.io.Serializable; 
import java.util.List; 

public interface GenericDao<T, K extends Serializable> 
{ 
    T find(K id); 
    List<T> find(); 
    List<T> find(T example); 
    List<T> find(String queryName, String [] paramNames, Object [] bindValues); 

    K save(T instance); 
    void update(T instance); 
    void delete(T instance); 
} 

Si los objetos en el mapa 1: 1 con sus cinco mesas, yo diría que es un exceso APP cuadrado.

¿Su aplicación actualmente es del orden de 3MB JAR? Si no, entonces Hibernate o JPA duplicarán el tamaño. Puede cuantificar exactamente cuánto. Y hay más de un JAR, porque ambos tienen dependencias.

YAGNI dice que debes mantenerlo simple. ¡Son cinco mesas!

Cambiar de proveedor, si lo hace correctamente, significa cambiar un JAR de controlador JDBC, cambiar el nombre de la clase de controlador y agregar la nueva URL de conexión, lo cual tiene que hacer sin importar qué tecnología elija.

Encuentro que las bases de datos no cambian tan radicalmente. ¿Cambiará el esquema, pero todo el proveedor? No es probable, especialmente si tiene varios clientes. Sería un gran inconveniente hacer que una base de datos de usuario cambie de base de datos.

¿Con cuál planeabas viajar? HSQL o algo que requerirá una instalación como MySQL? Esa es una preocupación más pertinente.

+0

¿JPA no requiere un "modelo de objeto para mapear" de la misma manera que lo hace Hibernate? –

+0

@matt b: Sí. No muy diferente de Hibernate. – lexicore

+0

¿podría mirar la pregunta editada? –

7

JPA es sin duda un camino a seguir si desea utilizar el mapeo de relaciones entre objetos, es independiente de la implementación (lo que significa que puede usarlo con Hibernate, Toplink, etc.) y es el estándar de facto. Hibernate tiene un conjunto de funciones más completo, pero esta es una solución no estándar, aunque muchas personas lo usan ... Personalmente siempre uso JPA respaldado por Hibernate. Intento mantenerme alejado de las cosas específicas de hibernación, pero si lo necesito, está ahí para mí.

Usar un marco como JPA/Hibernate para 5 tablas puede ser un poco exagerado. Su aplicación será alrededor de 5MB más grande y consumirá una camada más de memoria. Simplemente puede optar por usar JDBC emparejado con DAO.

Dado que JDBC usa SQL que es específico del proveedor (base de datos), esto podría ser problemático si planea utilizar diferentes bases de datos. JPA tiene una clara ventaja en esta área.

Elija lo que elija, no puede fallar, debe preguntarse, en su mayoría, qué es el aumento de tamaño y el consumo de memoria, y si está dispuesto a escribir el código DAO JDBC. Generalmente odio esto :-)

+0

¿podría mirar la pregunta editada? –

+0

Parece que fui demasiado tarde, pero tuviste algunas respuestas fabulosas :-) –

+0

Las últimas dos líneas son geniales. – Badman

Cuestiones relacionadas