Articulo de referencia

Apache Empire-db

Apache Empire-db es una biblioteca Java que proporciona una API orientada a objetos de alto nivel para acceder a sistemas de gestión de bases de datos relacionales (RDBMS) a tra...

Apache Empire-db es una biblioteca Java que proporciona una API orientada a objetos de alto nivel para acceder a sistemas de gestión de bases de datos relacionales (RDBMS) a través de JDBC . Apache Empire-db es de código abierto y se distribuye bajo la Licencia Apache 2.0 de la Apache Software Foundation .

En comparación con el mapeo objeto-relacional (ORM) u otras soluciones de persistencia de datos como Hibernate , iBATIS o TopLink, Empire-db no utiliza archivos XML ni anotaciones Java para proporcionar un mapeo de objetos Java simples ( POJO ) a tablas, vistas y columnas de la base de datos. En cambio, Empire-db utiliza un modelo de objetos Java para describir el modelo de datos subyacente y una API que funciona casi exclusivamente con referencias a objetos en lugar de literales de cadena .

El objetivo de Empire-db es proporcionar una mejor calidad de software y una mayor facilidad de mantenimiento mediante una mayor seguridad en tiempo de compilación y una menor redundancia de metadatos. Además, las aplicaciones pueden beneficiarse de un mejor rendimiento gracias al control total que el desarrollador tiene sobre las sentencias SQL y su ejecución, en comparación con la mayoría de las soluciones de mapeo OR. [ 1 ]

Beneficios importantes

La principal fortaleza de Empire-db reside en su API para la generación dinámica de SQL para sentencias arbitrarias de selección, actualización, inserción o eliminación, utilizando únicamente métodos Java que hacen referencia a los objetos del modelo. Esto garantiza la seguridad de tipos y prácticamente elimina el uso de literales de cadena para nombres o expresiones en el código. Además, se logra la independencia del sistema de gestión de bases de datos (DBMS) mediante un modelo de controlador conectable.

El uso de referencias a objetos de tabla y columna mejora significativamente la seguridad en tiempo de compilación y, por lo tanto, reduce la cantidad de pruebas. Como efecto secundario positivo, la función de autocompletado de código del IDE se puede usar para explorar el modelo de datos, lo que aumenta la productividad y elimina la necesidad de otras herramientas externas o complementos del IDE.

Además, el modelo de objetos proporciona acceso seguro y sencillo a la metainformación del modelo de datos, como el tipo de datos del campo, la longitud máxima del campo, si un campo es obligatorio y un número limitado de opciones para sus valores. Los metadatos son extensibles por el usuario y no se limitan a los metadatos relacionados con el sistema de gestión de bases de datos (DBMS). La disponibilidad de metainformación fomenta un código más genérico y elimina redundancias en todas las capas de la aplicación.

Características principales de un vistazo

  • La definición del modelo de datos mediante un modelo de objetos Java elimina la necesidad de aprender esquemas o anotaciones XML y permite fácilmente la intercepción y extensión por parte del usuario.
  • Sistema de gestión de bases de datos relacionales (RDBMS) portátil e independiente del sistema de gestión de registros (RDBMS), con soporte para diversas bases de datos relacionales como Oracle , Microsoft SQL Server , MySQL , Derby , H2 y HSQLDB (a partir de la versión 2.0.5).
  • Generación de DDL para el sistema de gestión de bases de datos (DBMS) de destino a partir de la definición de objetos, ya sea para toda la base de datos o para objetos individuales como tablas, vistas, columnas y relaciones.
  • La API con tipado seguro para la generación dinámica de comandos SQL permite la creación dinámica de sentencias SQL utilizando únicamente métodos de la API y referencias a objetos, en lugar de literales de cadena. Esto proporciona un alto grado de tipado seguro que simplifica las pruebas y el mantenimiento.
  • Menor cantidad de código Java y potente interceptación del acceso a campos y metadatos mediante beans dinámicos como alternativa a los POJO. Esto incluso permite realizar cambios en el modelo de datos (DDL) en tiempo de ejecución.
  • Seguimiento automático del estado de los registros y de las modificaciones de los campos (también conocido como "verificación de cambios") para insertar/actualizar únicamente los campos modificados.
  • Compatibilidad con el bloqueo optimista mediante la columna de marca de tiempo.
  • No es necesario trabajar siempre con entidades de base de datos completas. Cree consultas para proporcionar los datos exactamente como se necesitan y obtenga el resultado, por ejemplo, como una lista de cualquier tipo de POJO con sus respectivos métodos de configuración o constructor.
  • Librería ligera y pasiva que no requiere configuración y permite una integración sencilla con cualquier arquitectura o framework.

Ejemplo

Como ejemplo, consideremos una base de datos con dos tablas llamadas Empleados y Departamentos , de la cual se debe recuperar una lista de empleados en un formato particular, con ciertas restricciones y en un orden determinado.

Se supone que la sentencia SQL con la sintaxis de Oracle correspondiente es la siguiente:

SELECT t1.EMPLOYEE_ID , t1.LASTNAME || ' , ' || t1.FIRSTNAME AS NAME , t2.DEPARTMENT FROM ( EMPLEADOS t1 INNER JOIN DEPARTAMENTOS t2 ON t1.DEPARTMENT_ID = t2.DEPARTMENT_ID ) WHERE upper ( t1.LASTNAME ) LIKE upper ( ' Foo % ' ) AND t1.RETIRED = 0 ORDER BY t1.LASTNAME , t1.FIRSTNAME

Esta sentencia SQL se puede crear utilizando la API de comandos de Empire-db mediante referencias al modelo de objetos como esta:

SampleDB db = getDatabase ( ) ; // Declarar atajos ( no es necesario pero es conveniente ) SampleDB.Employees EMP = db.EMPLOYEES ; SampleDB.Departments DEP = db.DEPARTMENTS ; // Crear un objeto de comando DBCommand cmd = db.createCommand ( ) ; // Seleccionar columnas cmd.select ( EMP.EMPLOYEE_ID ) ; cmd.select ( EMP.LASTNAME.append ( " , " ) .append ( EMP.FIRSTNAME ) .as ( " NAME " ) ) ; cmd.select ( DEP.DEPARTMENT ) ; // Unir tablas cmd.join ( EMP.DEPARTMENT_ID , DEP.DEPARTMENT_ID ) ; // Establecer restricciones cmd.where ( EMP.LASTNAME.likeUpper ( " Foo % " ) ) ; cmd.where ( EMP.RETIRED.is ( false ) ) ;// Establecer orden cmd . orderBy ( EMP . LASTNAME ); cmd . orderBy ( EMP . FIRSTNAME );

Para ejecutar la consulta y recuperar una lista de POJO que contienen el resultado de la consulta, se puede utilizar el siguiente código:

// Definición de clase para objetos de destino public class EmployeeInfo { private int employeeId ; private String name ; private String department ; // Métodos getter y setter para todas las propiedades // o un constructor público que utilice campos public get ... public set ... }// Recuperar la lista de empleados usando el objeto cmd creado anteriormente DBReader reader = new DBReader (); try { reader . open ( cmd , getConnection ()); List < EmployeeInfo > empList = reader . getBeanList ( EmployeeInfo . class ); } finally { reader . close () }

Empire-db también admite el acceso a campos mediante referencias a objetos o la obtención de resultados de consultas en formato XML.

Historia

Empire-db fue desarrollado originalmente en ESTEAM Software, una empresa alemana de desarrollo de software que utilizó Empire-db para desarrollar diversas aplicaciones para una variedad de sectores diferentes.

En enero de 2008, Empire-db se convirtió oficialmente en software de código abierto y se publicó por primera vez a través de SourceForge.net.

En junio de 2008 se presentó una propuesta a la Apache Software Foundation para que Empire-db se convirtiera en un proyecto de la Apache Incubator. En julio de 2008, Empire-db fue aceptado para la incubación y todos los derechos sobre el software fueron transferidos a la Apache Foundation.

En octubre de 2008, Empire-db 2.0.4 fue la primera versión oficial del programa incubador de Apache en la que todos los nombres de los paquetes se modificaron para comenzar con org.apache.empire.

Véase también

Referencias

  1. "Apache Empire-db" . empire-db.apache.org . Consultado el 21 de marzo de 2022 .
  • Sitio web oficial