2008-11-17 28 views
104

Tengo un programa java de usuario único que me gustaría tener datos almacenados en una base de datos liviana como Derby o Sqlite. Me gustaría utilizar una capa de abstracción de datos en mi programa. Hibernate parece requerir mucha configuración y es excesivo para lo que necesito. ¿Cuáles son alternativas ligeras a Hibernate?¿Alternativa ligera a Hibernate?

+1

Puede comprobar alternativas, junto con un ejemplo de uso (y ejemplo de configuración con la primavera) aquí: https://github.com/bwajtr/ java-persistence-frameworks-comparison –

Respuesta

140

Hibernate requiere una configuración próxima a cero si utiliza anotaciones. ¡Incluso puede descubrir automáticamente frijoles mapeados en el classpath! No veo ninguna alternativa desde el punto de vista de la simplicidad y.

También puede exponerse como JPA, que es (en mi humilde opinión) aún más simple.

+30

junto a cero no es cero. – njzk2

+11

también necesita muchas bibliotecas externas intente usarlo en Android: P – sherif

+4

Intenté encontrar una alternativa más simple a Hibernate. En un proyecto personal, utilicé MyBatis (qué nombre tan terrible). Fue mucho más trabajo que Hibernate. Hibernate realmente ahorra mucha codificación SQL y ayuda con las relaciones entre padres e hijos. También miré algunos ORM's de estilo ActiveRecord para Java. Ninguno parecía maduro o más fácil que Hibernate. Entonces, voy a volver a Hibernate. – devdanke

29

Aún requiere configuración XML, pero eche un vistazo a MyBatis (formerly iBatis).

+1

Ahora es MyBatis el que queda: http://www.mybatis.org/ –

+3

Creo que el XML en i/MyBatis es en realidad una ventaja ya que mantiene las consultas complicadas en un formato que se puede copiar fácilmente a una consola SQL para probar. –

+0

iBatis es muy liviano. Puede definir y controlar más fácilmente su asignación de SQL a objeto. –

9

Cayenne me ha servido bien. Relativamente fácil de entender y ponerlo en funcionamiento. Encuentro la parte de ingeniería inversa particularmente encantadora. La configuración se puede hacer con una GUI.

1

Es posible que desee echar un vistazo a prevayler (en sourceforge). Un enfoque de persistencia algo más ligero. ¿O estabas pensando en hacer reportes contra el DB?

11

Apache Commons DBUtils toma gran parte del gruntwork repetitivo de la programación JDBC. Requiere poca configuración y es fácil de aprender. No es un marco ORM (en la forma en que Hibernate y otros marcos mencionados aquí) pero automatiza la asignación de columnas SELECT a los campos miembros de Java, así como otras tareas de programación JDBC repetitivas. Sin duda es liviano.

12

Puedes echar un vistazo a Ebean ORM. - Sin sesiones - la carga diferida solo funciona - API más simple de usar y aprender.

+0

¿es compatible con SQLite y Android? – endryha

+0

Se agregó el soporte SQLite. Todavía no lo he probado en Android. –

52

Mi biblioteca ORMLite es una de esas alternativas. Es compatible con MySQL, Postgres, Microsoft SQL Server, H2, Derby, HSQLDB y Sqlite, y se puede extender fácilmente a otros. Utiliza anotaciones para configurar clases, buen soporte de muelle, generador de consultas flexibles, etc ..

+0

¡OrmLite realmente se ve prometedor! Pero, ¿este proyecto aún está vivo? No hay una nueva versión por más de un año, no hay respuesta para atraer solicitudes/problemas en Github. – Stefan

+3

La versión 5.0 se lanzó en junio de 2016. –

22

jOOQ barcos con una fluidez DSL simulando SQL directamente en Java como un efecto secundario de sus objetivos principales, que son:

  • Fuente de generación de código
  • soporte completo para SQL estándar, incluyendo las características del lenguaje SQL, como los sindicatos, selecciona anidadas, todos los tipos de combinaciones, aliasing (por ejemplo, para autocombinaciones), etc
  • Amplio soporte para SQL no estándar incluyendo UDT , procedimientos almacenados, funciones específicas del proveedor, etc.

Lea sobre jOOQ en este artículo: http://java.dzone.com/announcements/simple-and-intuitive-approach, o visite el sitio web directamente: http://www.jooq.org

(exención de responsabilidad, trabajo para la compañía detrás de jOOQ)

+3

jOOQ rocks! Implementamos un servicio ETL a gran escala con él, y no podríamos estar más contentos. He usado iBATIS, y jOOQ ofrece todas las ventajas de SQL de bajo nivel sin las resmas de XML y la falta de seguridad del tipo. – spieden

+3

Olvidé mencionar una de las mejores características de jOOQ: las consultas complejas y/o generadas dinámicamente se pueden ensamblar de forma controlada y verificada por el compilador de Java, lo que le ahorra todos los errores de sintaxis ambiguos arrojados y proporciona tiempo de compilación Cobertura de regresión para cuando el esquema cambia debajo de usted. – spieden

+0

JOOQ es increíble, pero obviamente ahora no es gratis para Oracle y Sybase, por lo que muchas personas están evitando este marco y están usando MyBatis – Makky

6

puedo proponer Apache imperio-db. http://incubator.apache.org/empire-db/

Apache Empire-db es un componente de persistencia de datos relacionales de código abierto que permite la definición de consultas dinámicas independientes del proveedor de bases de datos, así como la recuperación y actualización segura y simple de datos. En comparación con la mayoría de las otras soluciones, como p.Implementaciones de Hibernate, TopLink, iBATIS o JPA, Empire-db toma un enfoque considerablemente diferente, con un enfoque especial en seguridad en tiempo de compilación, redundancias reducidas y productividad mejorada del desarrollador.

Un ejemplo:

// Define the query 
DBCommand cmd = db.createCommand(); 
DBColumnExpr EMPLOYEE_FULLNAME= db.EMPLOYEES.LASTNAME.append(", ") 
         .append(db.EMPLOYEES.FIRSTNAME).as("FULL_NAME"); 
// Select required columns 
cmd.select(db.EMPLOYEES.EMPLOYEE_ID, EMPLOYEE_FULLNAME); 
cmd.select(db.EMPLOYEES.GENDER, db.EMPLOYEES.PHONE_NUMBER); 
cmd.select(db.DEPARTMENTS.NAME.as("DEPARTMENT")); 
cmd.select(db.DEPARTMENTS.BUSINESS_UNIT); 
// Set Joins 
cmd.join(db.EMPLOYEES.DEPARTMENT_ID, db.DEPARTMENTS.DEPARTMENT_ID); 
// Set contraints and order 
cmd.where(EMP.LASTNAME.length().isGreaterThan(0)); 
cmd.orderBy(EMP.LASTNAME);; 
1

Si se utiliza una base de datos relacional no es obligatorio, dan db4o intentarlo.

1

creé sormula como alternativa al peso pesado del ORM. Está preparado para CRUD, es compatible con POJO, es fácil de usar, configurar y comprender. El uso de configuración cero es posible. www.sormula.org

2

que podría ser un poco tarde a la fiesta, pero liberado ActiveJDBC en 2010, que es una implementación ORM de Active Record, es más de 10 veces más ligero que el de hibernación en las dependencias, al menos dos veces más rápido en tiempo de ejecución y requiere cero configuración o anotaciones.

-2

Kiteframework es también un marco orm muy ligero. Proporciona casi todas las operaciones de DB con configuraciones mínimas.

http://deipakgarg.github.com/Kite-ORM/

Revelación: yo soy el autor de este proyecto

+3

¡Bienvenido a Stack Overflow! ¡Gracias por publicar tu respuesta! Asegúrese de leer detenidamente [Preguntas frecuentes sobre autopromoción] (http://stackoverflow.com/faq#promotion). También tenga en cuenta que * se requiere * que publique un descargo de responsabilidad cada vez que se vincula a su propio sitio/producto. –

+1

no está en desarrollo, no hay un nuevo lanzamiento actual del autor, la última versión esperada fue en 2012. – Barun