JDXA (JDX for Android) is a flexible, non-intrusive, developer-friendly, and lightweight Object-Relational Mapping (ORM) solution for seamlessly bridging the gap between the Java object model and SQL relational model for mobile applications. JDXA increases programmer productivity tremendously by presenting a more intuitive, object-oriented view of relational data and eliminating the need to write endless lines of complex low-level SQL code.
Based on some well thought-out KISS (Keep It Simple and Straightforward) principles, JDXA provides fast, flexible, and easy-to-use ORM functionality in a small footprint. JDXA employs a clean, dynamic, and meta-data driven programming methodology supporting pure domain object models, resulting in simpler and faster applications that are easy to evolve and maintain.
The product comes with Android platform-specific utility classes to facilitate the easy and speedy development of mobile applications that need on-device access to SQLite relational database.
JDXA Features:
Please click on any of the following features to learn more.
Declarative mapping specification based on a simple grammar
- Human-readable and easily comprehensible; no need to struggle with complex XML files.
- Compact; most default mapping is automatically deduced; avoids verbosity.
- Most mapping primitives are orthogonal to each other, avoiding unnecessary tight coupling and enabling easy evolution.
- Allows cross-referencing of classes and collections no matter in which order their mappings have been defined.
- Intuitive and flexible ways of mapping complex object structures.
- Mappings for collections and relationships are defined at the object level, not at the relational level; makes it easier to understand and modify such mappings.
A non-intrusive and dynamic programming model
- Supports POJO (Plain Old Java Object) classes for persistence.
- No requirement to inherit from a special class.
- No generation of complex source code for data access methods.
- Allows easy evolution of object and relational models.
- Supports explicit transactions
Easily handles complex object structures, including class-hierarchies.
- Associative and aggregated relationships.
- 1-to-1, 1-to-many, and many-to-many relationships.
- Aggregated or separated tables options for storing objects in a class-hierarchy.
- Support for persisting JSON objects.
- Support for persisting Kotlin objects.
Flexible query options – deep, shallow, and anything in-between
- Supports loading of partial objects.
- Sophisticated query predicates (including path-expressions).
- Powerful object-streaming functionality.
- Polymorphic queries.
- Persistence-by-reachability.
- Dynamic data routing.
- Named queries for greater convenience, more flexibility, and better performance.
- No learning of any new query language required.
Virtual attributes
- Allows mapping of class attributes, which are not explicitly declared in the class definition.
- Enables flexible evolution of object/data modeling in many situations.
Aggregate operations
- Returns the aggregate value (COUNT, MIN, MAX, AVG, SUM) for the specified attribute of the qualifying objects. Enables easy data analysis.
Object caching
- Provides super-fast access to business objects from high-performance memory cache.
- Regular and LRU caches.
Flexible Support for Multiple Mappings and Multiple Databases
- An App may easily employ multiple mapping specifications for flexible and modular partitioning of mapping units
- An App may work with multiple Databases simultaneously
Optimistic locking for concurrency control
- Provides a faster and more scalable locking alternative to database. locking. Especially useful for long-running transactions with minimal conflicting update operations.
Lightweight and optimized mapping engine
- Self-healing connection pooling.
- Use of prepared statements.
- Optimized SQL statements.
- Minimal database trips.
- Short code paths.
- Small footprint.
- Accelerates data exchange.
Automatic Schema generation
- JDX automatically creates the database schema (tables, constraints, etc.) as per the Java object model and the object-relational mapping specification.
Nifty components and facilities to simplify development
- Utility components for pooling JDX handles.
- Persistently unique sequence generators.
- Object-viewing facilities.
- Support for instance callback methods.
- Configurable logging destination
Easy-to-learn and easy-to-use
- Clean design – not an over-engineered framework with complex semantics.
- Small set of simple and flexible APIs.
- No learning of new query language required.
- Meaningful error and debug messages.
Extensive documentation
- A comprehensive manual, many tutorials and working examples.