Object-Relational Mapping (ORM) is one of the most complex issues to address in modern application architecture. JDXA (JDX for Android) ORM provides a simple, practical, and robust solution to this important problem. JDXA solves the tough problem of persistence of domain objects for Android applications by eliminating endless lines of complex SQL code.
You don’t need to get bogged down with overly intricate methodologies and over-arching frameworks. JDXA gives you the control you need to be an effective developer, helping you create more flexible and higher quality mobile applications faster.
The JDXA ORM product may be licensed in two editions – JDXA Lite and JDXA Professional. The following table describes the highlights and features of the different editions of the product.
Highlights and Features | JDXA Lite |
JDXA Professional |
Simple, Non-intrusive, and Flexible Design | ||
Simple concepts; easy development steps; quick learning curve | ||
No need to inherit from a base class or implement any special interfaces | ||
Dynamic mapping engine: No static generation and maintenance of large amounts of messy code | ||
No pre-processing or post-processing of your code | ||
Easy evolution of object and relational models | ||
Smart and Elegant Mapping Specification | ||
Declarative mapping specifications based on a simple grammar | ||
Human-readable and easily comprehensible | ||
No need to struggle with complex XML files | ||
No need to clutter your source code with mapping annotations | ||
Compact; most default mapping is automatically deduced; avoids verbosity | ||
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 | ||
Maximum number of mapping classes | 10 | Unlimited |
Support for Complex Object Modeling including Class Hierarchies and JSON Objects | ||
Associative relationships (Containment by Reference) | ||
Aggregated relationships (Containment by Value) | ||
Persistence-by-reachability | ||
One-to-One relationships | ||
One-to-Many relationships | ||
Many-to-Many relationships | ||
Multiple options to store class-hierarchy objects | ||
Inline storage of attributes of a contained object | ||
Implicit attributes whose values are automatically initialized based on RELATIONSHIPs | ||
Virtual attributes | ||
JSON Objects persistence | ||
Kotlin Objects persistence | ||
Small Set of Simple and Flexible APIs | ||
Support for Transactions | ||
Flexible query options – deep, shallow, and anything in-between. | ||
Sophisticated query predicates (including path-expressions) | ||
Named queries | ||
Polymorphic queries | ||
Positional queries | ||
Object streaming | ||
Aggregate operations (COUNT, MIN, MAX, AVG, SUM) | ||
Support for instance callback methods | ||
Partial object loading | ||
Retrieving collections objects in ascending/descending order | ||
Filter referenced objects for query, update, and delete operations | ||
Bulk inserts, updates, and deletes | ||
Persistence-by-reachability | ||
Sequence generators | ||
Object Caching (Read-only objects) | ||
Caching options at individual class level to improve performance | ||
Regular and LRU caches | ||
Pre-population option for caching objects | ||
Automatic Schema Generation | ||
Automatic creation of the database schema (tables, constraints. etc.) as per the object model and the ORM specification | ||
Facility for pre-population of data after schema creation | ||
Lightweight and Optimized Mapping Engine | ||
Short code paths | ||
Use of Prepared statements | ||
Optimized SQL statements | ||
Minimal database trips | ||
Caching of metadata | ||
Android Specific Utility Classes | ||
JDXHelper: A useful facade (wrapper) for many of the JDX ORM methods. | ||
JDXQueryAsyncTask: An AsyncTask to facilitate making JDX query calls in a separate (non-UI) thread. | ||
SimpleObjectListAdapter: An object list adapter utility class to retrieve and view objects of a given class in a ListActivity | ||
SimpleStreamingObjectsListAdapter: An object list adapter utility class to retrieve and view a polymorphic stream of objects of a given class in a ListActivity | ||
JDXSeqUtil: A utility class to easily mange persistently unique Named Sequence values | ||
Easy-to-learn and Easy-to-use | ||
Clean design – not an over-engineered framework with complex semantics | ||
Extensive documentation (Comprehensive user manual and Javadocs) | ||
No requirement of learning of a new query language | ||
Many working examples | ||
Optional logging of all SQL statements | ||
Meaningful error and debug messages to diagnose any problems | ||