Tengo un programa java de un solo usuario que me gustaría almacenar datos en una base de datos liviana como Derby o Sqlite. Me gustaría usar 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 las alternativas ligeras a Hibernate?
CMobileCom JPA es una implementación JPA ligera para Java y Android. Su tamaño es de unos 380 K. Es ligero y rápido. cmobilecom.com
John
Respuestas:
142
Hibernate requiere una configuración cercana a cero si usa anotaciones. ¡Incluso puede descubrir automáticamente beans mapeados en el classpath! No veo ninguna alternativa tanto desde la simplicidad como desde el punto de vista del poder.
También puede exponerse como JPA, que es (en mi humilde opinión) incluso más simple.
también necesita muchas bibliotecas externas, intente usarlo en Android: P
sherif
4
Intenté encontrar una alternativa más sencilla a Hibernate. En un proyecto personal, usé 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 de estilo ActiveRecord para Java. Ninguno parecía maduro o más fácil que Hibernate. Entonces, vuelvo a Hibernate.
devdanke
56
¿No se trataba de una ALTERNATIVA?
Łukasz Gruner
8
Hibernate no es una alternativa ligera a Hiberernate
cosbor11
55
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 Spring, generador de consultas flexible, etc.
¡OrmLite realmente parece prometedor! Pero, ¿sigue vivo este proyecto? Sin versión nueva durante más de un año, sin respuesta a solicitudes / problemas de extracción en Github.
Stefan
3
La versión 5.0 fue lanzada en junio de 2016.
Lauri Laanti
La versión 5.1 fue lanzada el 19/02/2018. Pero no es comparable en absoluto a Hibernate y algunas implementaciones de anotaciones JPA no funcionan correctamente.
M-Razavi
"comparable a Hibernate"? Ambos son ORM, pero por lo demás son muy diferentes. En términos de implementaciones de JPA, por favor complete un informe de error si encuentra algo @ M-Razavi.
iBatis es muy ligero. Puede definir y controlar más fácilmente su SQL a la asignación de objetos.
Berlin Brown
... tengo que votar por iBatis, aunque tenga en cuenta que no es una alternativa ORM ya que no intenta competir con Hibernate. Es un animal un poco diferente, pero se ajusta a lo que estás buscando en términos de peso.
Creo que el XML en i / MyBatis es en realidad una ventaja, ya que mantiene consultas complicadas en un formato que se puede copiar fácilmente a una consola SQL para realizar pruebas.
Peter Tillemans
22
jOOQ se envía con un DSL fluido que simula SQL directamente en Java como efecto secundario para sus principales objetivos, que son:
Generación de código fuente
Soporte completo para SQL estándar, incluidas características del lenguaje SQL como UNION, SELECT anidadas, todo tipo de JOIN, aliasing (por ejemplo, para autouniones), etc.
Amplio soporte para SQL no estándar, incluidos UDT, procedimientos almacenados, funciones específicas del proveedor, etc.
¡JOOQ rocas! Implementamos un servicio ETL a gran escala con él y no podríamos estar más felices. He usado iBATIS, y jOOQ ofrece las mismas ventajas de SQL de bajo nivel sin la gran cantidad de XML y la falta de seguridad de tipos.
spieden
3
Olvidé mencionar una de las mejores características de jOOQ: las consultas complejas y / o generadas dinámicamente se pueden ensamblar de manera controlada y verificadas por el compilador de Java, lo que le ahorra todos esos errores de sintaxis ambiguos que arrojan las bases de datos y proporciona regresión en tiempo de compilación. cobertura para cuando el esquema cambie debajo de usted.
spieden
JOOQ es increíble, pero obviamente ahora no es gratuito para Oracle y Sybase, por lo que mucha gente está evitando este marco y está usando como MyBatis
Makky
@Makky: Gracias por tus comentarios. Espero que tenga en mente las propuestas de valor reales y que no vaya a cambiar a un marco completamente diferente simplemente por el hecho de que uno es gratuito y el otro no. El costo de mantenimiento y migración que esto induciría en su software es prohibitivo y está mucho más allá de cualquier licencia comercial razonable ...
Lukas Eder
15
Apache Commons DBUtils elimina gran parte del trabajo 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 lo son Hibernate y otros marcos mencionados aquí) pero automatiza el mapeo de columnas SELECT a campos miembros de Java, así como otras tareas repetitivas de programación JDBC. Ciertamente es liviano.
Se ha agregado compatibilidad con SQLite. Todavía no lo he probado en Android.
Rob Bygrave
9
Cayenne me ha servido bien. Relativamente fácil de entender y poner en marcha. Encuentro la parte de la ingeniería inversa particularmente encantadora. La configuración se puede realizar con una GUI.
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 de datos segura y sencilla. En comparación con la mayoría de las otras soluciones, como las implementaciones de Hibernate, TopLink, iBATIS o JPA, Empire-db adopta un enfoque considerablemente diferente, con un enfoque especial en la seguridad en tiempo de compilación , reducción de redundancias y mejora de la productividad del desarrollador.
Un ejemplo:
// Define the queryDBCommand 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);;
Este debería estar en la parte superior. ¡Es genial!
qwertzguy
2
Puede que llegue un poco tarde a la fiesta, pero lancé ActiveJDBC en 2010, que es una implementación ORM del patrón ActiveRecord, es más de 10 veces más liviano que Hibernate en dependencias, al menos dos veces más rápido en tiempo de ejecución y no requiere configuración o anotaciones.
Es posible que desee echar un vistazo a prevayler (en sourceforge). Un enfoque algo más ligero de la persistencia. ¿O estaba pensando en hacer informes contra la base de datos?
He creado sormula como una alternativa a ORM de peso pesado. Está preparado para CRUD, compatible con POJO, fácil de usar, configurar y comprender. Es posible el uso de configuración cero. www.sormula.org
¡Bienvenido a Stack Overflow! ¡Gracias por publicar tu respuesta! Asegúrese de leer detenidamente las preguntas frecuentes sobre la autopromoción. También tenga en cuenta que es necesario que publique un descargo de responsabilidad cada vez que se vincule a su propio sitio / producto.
Andrew Barber
2
no está en desarrollo, no hay una nueva versión actual del autor, la última versión esperada fue en 2012.
Respuestas:
Hibernate requiere una configuración cercana a cero si usa anotaciones. ¡Incluso puede descubrir automáticamente beans mapeados en el classpath! No veo ninguna alternativa tanto desde la simplicidad como desde el punto de vista del poder.
También puede exponerse como JPA, que es (en mi humilde opinión) incluso más simple.
fuente
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 Spring, generador de consultas flexible, etc.
fuente
Todavía requiere configuración XML, pero eche un vistazo a MyBatis (anteriormente iBatis) .
fuente
jOOQ se envía con un DSL fluido que simula SQL directamente en Java como efecto secundario para sus principales objetivos, que son:
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
(Descargo de responsabilidad, trabajo para la empresa detrás de jOOQ)
fuente
Apache Commons DBUtils elimina gran parte del trabajo 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 lo son Hibernate y otros marcos mencionados aquí) pero automatiza el mapeo de columnas SELECT a campos miembros de Java, así como otras tareas repetitivas de programación JDBC. Ciertamente es liviano.
fuente
Puede echar un vistazo a Ebean ORM . - Sin sesiones - La carga diferida simplemente funciona - API más sencilla de usar y aprender.
fuente
Cayenne me ha servido bien. Relativamente fácil de entender y poner en marcha. Encuentro la parte de la ingeniería inversa particularmente encantadora. La configuración se puede realizar con una GUI.
fuente
Puedo proponer apache empire-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 de datos segura y sencilla. En comparación con la mayoría de las otras soluciones, como las implementaciones de Hibernate, TopLink, iBATIS o JPA, Empire-db adopta un enfoque considerablemente diferente, con un enfoque especial en la seguridad en tiempo de compilación , reducción de redundancias y mejora de la productividad del desarrollador.
Un ejemplo:
fuente
El marco ORMAN también es bueno. https://github.com/ahmetalpbalkan/orman
Documentación: https://github.com/ahmetalpbalkan/orman/wiki
Comparación: https://github.com/ahmetalpbalkan/orman/wiki/Why-orman-is-better-than-other-orms-for-you%3F
fuente
Puede que llegue un poco tarde a la fiesta, pero lancé ActiveJDBC en 2010, que es una implementación ORM del patrón ActiveRecord, es más de 10 veces más liviano que Hibernate en dependencias, al menos dos veces más rápido en tiempo de ejecución y no requiere configuración o anotaciones.
fuente
Es posible que desee echar un vistazo a prevayler (en sourceforge). Un enfoque algo más ligero de la persistencia. ¿O estaba pensando en hacer informes contra la base de datos?
fuente
Si el uso de una base de datos relacional no es obligatorio, pruebe db4o.
fuente
He creado sormula como una alternativa a ORM de peso pesado. Está preparado para CRUD, compatible con POJO, fácil de usar, configurar y comprender. Es posible el uso de configuración cero. www.sormula.org
fuente
Kiteframework también es un marco de orm muy ligero. Proporciona casi todo el funcionamiento de la base de datos con configuraciones mínimas.
http://deipakgarg.github.com/Kite-ORM/
Divulgación: soy el autor de este proyecto
fuente