Apache Empire-db


Apache Empire-db is a Java library that provides a high level object-oriented API for accessing relational database management systems through JDBC. Apache Empire-db is open source and provided under the Apache License 2.0 from the Apache Software Foundation.
Compared to Object-relational mapping 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 Java object 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 almost solely 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 redundancy of metadata. Additionally applications may benefit from better performance due to full control over SQL statements and their execution by the developer compared to most OR-mapping solutions.

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 almost 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

As an 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 is assumed to be as follows:

SELECT t1.EMPLOYEE_ID,
t1.LASTNAME || ', ' || t1.FIRSTNAME AS NAME,
t2.DEPARTMENT
FROM
WHERE upper LIKE upper
AND t1.RETIRED=0
ORDER BY t1.LASTNAME, t1.FIRSTNAME

This SQL statement can be created using Empire-db's command API using object model references like this:

SampleDB db = getDatabase;
// Declare shortcuts
SampleDB.Employees EMP = db.EMPLOYEES;
SampleDB.Departments DEP = db.DEPARTMENTS;
// Create a command object
DBCommand cmd = db.createCommand;
// Select columns
cmd.select;
cmd.select.append.as);
cmd.select;
// Join tables
cmd.join ;
// Set constraints
cmd.where;
cmd.where;
// Set order
cmd.orderBy;
cmd.orderBy;

In order to execute the query and retrieve a list of POJO's holding the query result the following code may be used:

// Class definition for target objects
public class EmployeeInfo
// Retrieve employee list using the cmd object created above
DBReader reader = new DBReader;
try finally

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

History

Empire-db was originally developed at ESTEAM Software a German software development company which used Empire-db to develop various applications for a variety of different 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 incubator release with all package names changed to begin with org.apache.empire.