Content deleted Content added
No edit summary |
removed Category:Java (programming language); added Category:Java (programming language) libraries using HotCat |
||
(41 intermediate revisions by 35 users not shown) | |||
Line 1:
{{Short description|Open-source Java library}}
{{ Infobox Software▼
{{Notability|Products|date=March 2022}}
| name = Apache Empire-db▼
| screenshot = ▼
| logo = Apache_Empire-db_Logo.svg
| caption = ▼
| logo size = 300px
| developer = [[Apache Software Foundation]]▼
| latest release version = 2.0.5 ▼
| latest release date = {{release date|2009|09|24}}▼
| latest preview version =
| latest preview date
| operating system
| repo = {{URL|https://gitbox.apache.org/repos/asf?p{{=}}empire-db.git|EmpireDB Repository}}
| programming language
| genre
| license
| website = {{URL|//empire-db.apache.org/}}
}}
'''Apache Empire-db''' is a Java library that provides a high level object
Compared to [[Object-relational mapping]] (ORM) or other data persistence solutions such as [[Hibernate (Java)|Hibernate]], [[iBATIS]] or [[TopLink]] Empire-db does not use XML files or Java annotations to provide a mapping of plain (old)
▲'''Apache Empire-db''' is a Java library that provides a high level object oriented API for accessing [[Relational database management system]]s (RDBMS) through [[JDBC]]. Apache Empire-db is Open Source and provided under the Apache 2.0 license from the [[Apache Software Foundation]].
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-
▲Compared to [[Object-relational mapping]] (ORM) or other data persistence solutions such as [[Hibernate (Java)|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 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-
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
▲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.▼
▲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
== Features at a glance ==
* Data model definition through a Java object
* Portable RDBMS independent record handling and command definition with support for a variety of relational databases such as [[Oracle Database|Oracle]], [[Microsoft SQL
▲* Data model definition through a Java object modell omits the need to learn XML schemas or annotations and easily allows user interceptions and extentions.
▲* Portable RDBMS independent 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.
Line 41 ⟶ 40:
* 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
* Lightweight and passive library with zero configuration footprint that allows simple integration with any architecture or framework.
== Example ==
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,
Line 59 ⟶ 57:
AND t1.RETIRED=0
ORDER BY t1.LASTNAME, t1.FIRSTNAME
</syntaxhighlight>
This SQL statement can be created using Empire-db's command API using object model references like this:
<
SampleDB db = getDatabase();
// Declare shortcuts (not necessary but convenient)
Line 82 ⟶ 80:
cmd.orderBy(EMP.LASTNAME);
cmd.orderBy(EMP.FIRSTNAME);
</syntaxhighlight>
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 {
Line 92 ⟶ 90:
private String name;
private String department;
//
// or a public Constructor using fields
public get...
Line 101 ⟶ 99:
DBReader reader = new DBReader();
try {
reader.open(cmd, getConnection());
List<EmployeeInfo> empList = reader.getBeanList(EmployeeInfo.class);
} finally {
reader.close()
}
</syntaxhighlight>
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
In January 2008 Empire-db was made officially
▲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 differenct 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.
Line 120 ⟶ 117:
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.
== See also ==
{{Portal|Computer programming}}
* [[Java Database Connectivity]] (JDBC)
* [[Object-relational mapping]]
* [[Hibernate (Java)|Hibernate]]
* [[
* [[
* [[Apache Struts]]
==References==
{{reflist}}
== External links ==▼
* {{official website|//empire-db.apache.org/}}
{{Apache Software Foundation}}
▲==External links ==
[[Category:Apache Software Foundation
[[Category:
|