Jump to content

apache Empire-db

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by Rdoebele (talk | contribs) at 14:26, 27 June 2009. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.


Apache Empire-db
Developer(s)Apache Software Foundation
Written inJava
Operating systemCross-platform
TypePersistence Framework
LicenseApache License 2.0
Websitehttp://incubator.apache.org/empire-db

Apache Empire-db is an Java component that provides a high level object oriented API for accessing Relational database management systems (RDBMS) through JDBC. Apache Empire-db is Open Source and provided under the Apache 2.0 license from the Apache Software Foundation.

Compared to Object-relational mapping (ORM) or other data persistence solutions such as Hibernate, iBATIS or TopLink Empire-db does not use XML files or Java annotations to provide a mapping of plain (old) java object (POJO's) to database tables, views and columns. Instead Empire-db uses a Java object model to describe the underlying data model and an API that works with object references rather than string literals.

Empire-db's aim is to provide better software quality and improved maintainability through increased compile-time safety and reduced redundancies of metadata.

Major benefits

Empire-db’s key strength is its API for dynamic SQL generation for arbitrary select, update, insert or delete statements, purely by using Java methods which reference the model objects. This provides type-safety and entirely eliminates the use of string literals for names or expressions in code. Additionally DBMS independence is achieved through a pluggable driver model.

Using references to table and column objects significantly improves compile-time safety and thus reduces the amount of testing. As a positive side effect the IDE’s code completion can be used to browse the data model, increases productivity and eliminates the need for other external tools or IDE-plugins.

Further the object model also provides safe and easy access to meta-information of the data model such as field data type, maximum field length, whether a field is mandatory and a finite choice of options for a field’s values. Metadata is user-extensible and not limited to DBMS related metadata. Availability of meta-information encourages more generic code and eliminates redundancies throughout application layers.


Features at a glance

  • RDBMS independent data model definition in Java requires no XML schemas or annotations to learn and easily allows user defined interceptions and extensions.
  • Portable record handling and command definition with support for a variety of relational databases such as Oracle, Microsoft SQL-Server, MySQL, Derby, H2 and HSQLDB (as of version 2.0.5)
  • DDL generation for target DBMS from object definition, either for the entire database or for individual objects such as tables, views, columns and relations.
  • Type-safe API for dynamic SQL command generation allows dynamic building of SQL statements using API methods and object references only instead of string literals. This provides a high degree of type-safety which simplifies testing and maintenance.
  • Reduced amount of Java code and powerful interception of field and metadata access through dynamic beans as an alternative to POJO’s. This even supports data model changes (DDL) at runtime.
  • Automatic tracking of record state and field modification (aka "dirty checking") to only insert/ update modified fields.
  • Support for optimistic locking through timestamp column.
  • No need to always work with full database entities. Build queries to provide you with the data exactly as you need it, and obtain the result for example as a list of any type of POJO with matching property setters or constructor.
  • Lightweight and passive library with zero configuration footprint that allows simple integration with any architecture or framework.

Example

Consider a database with two tables called Employees and Departments for which a list of Employees in a particular format, with certain constraints and a given order should be retrieved. The corresponding Oracle syntax SQL statement might be as follows:

    SELECT t1.EMPLOYEE_ID, 
           t1.LASTNAME || ', ' || t1.FIRSTNAME AS NAME, 
           t2.DEPARTMENT
    FROM (EMPLOYEES t1 INNER JOIN DEPARTMENTS 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

This statement can be created using Empire-db's command API provided as follows:

    SampleDB db = getDatabase();
    // Declare shortcuts (not necessary but convenient)
    SampleDB.Employees EMP = db.EMPLOYEES;
    SampleDB.Departments DEP = db.DEPARTMENTS;
    // Create a command object
    DBCommand cmd = db.createCommand();
    // Select columns
    cmd.select(EMP.EMPLOYEE_ID);
    cmd.select(EMP.LASTNAME.append(", ").append(EMP.FIRSTNAME).as("NAME"));
    cmd.select(DEP.DEPARTMENT);
    // Join tables
    cmd.join  (EMP.DEPARTMENT_ID, DEP.DEPARTMENT_ID);
    // Set constraints
    cmd.where(EMP.LASTNAME.likeUpper("Foo%"));
    cmd.where(EMP.RETIRED.is(false));
    // Set order
    cmd.orderBy(EMP.LASTNAME);
    cmd.orderBy(EMP.FIRSTNAME);

The result of this query can be easily retrieved as a list of POJO's objects like this:

    public class EmployeeInfo {
        private int employeeId;
        private String name;
        private String department;
        // Gettter's and Setters for all properties
        // or a public Constructor using fields
        public get...
        public set...
    }

    // Retrieve Employee list using the cmd object created above
    DBReader reader = new DBReader();
    reader.open(cmd, getConnection());
    List<EmployeeInfo> empList = reader.getBeanList(EmployeeInfo.class);

Empire-db also supports field access thorugh object references or obtaining query results as XML.

History

Empire-db was originally developed at ESTEAM Software a German software company which used Empire-db to develop various applications for a variety of branches.

In January 2008 Empire-db was made officially Open Source and first published though SourceForge.Net. In June 2008 a proposal was submitted to the Apache Software Foundation for Empire-db to become an Apache Incubator project. In July 2008 Empire-db got accepted for incubation and all rights over the Software were transferred to the Apache Foundation.

In October 2008 Empire-db 2.0.4 was the first official Apache release with all package names changed to begin with org.apache.empire.

See also