Features
Core Features
Type-Safe Database Queries
PojoQuery uses Plain Old Java Objects (POJOs) to define your database queries. Each field in your POJO corresponds to a column in your database, providing type safety and compile-time checking.
@Table("user")
class User {
Long id;
String firstName;
String lastName;
String email;
}
Automatic SQL Generation
The library automatically generates clean, predictable SQL queries based on your POJO structure. No need to write complex SQL strings or worry about SQL injection.
// The POJO structure
class ArticleDetail extends Article {
User author;
CommentDetail[] comments;
}
// Generates a clean SQL query automatically
ArticleDetail article = PojoQuery.build(ArticleDetail.class)
.addWhere("article.id=?", articleId)
.execute(database).get(0);
Relationship Support
Easily define relationships between entities using standard Java field types. PojoQuery automatically handles the joins and field mapping.
-
One-to-One relationships
-
One-to-Many relationships
-
Many-to-Many relationships
-
Nested relationships
No Lazy Loading
Unlike traditional ORMs, PojoQuery doesn’t use lazy loading. This means:
-
No LazyInitializationException issues
-
Easy serialization to JSON/XML
-
Predictable behavior
-
Simpler debugging and testing
Customizable Through Annotations
Fine-tune your queries using annotations:
-
@Table
- Define table names -
@Join
- Specify join conditions -
@FieldName
- Customize field mappings -
@GroupBy
- Add grouping -
@OrderBy
- Define sorting -
And more…
Database Compatibility
PojoQuery supports different database quote styles and naming conventions:
-
MySQL (backticks)
-
ANSI SQL (double quotes)
-
Customizable quote styles
Query Building API
Flexible API for building queries:
-
Add WHERE clauses
-
Specify ORDER BY
-
Set LIMIT and OFFSET
-
Add custom joins
-
Group results
-
And more…
Transaction Support
Built-in support for database transactions:
DB.runInTransaction(dataSource, connection -> {
// Your transaction code here
return result;
});
Advanced Features
Custom Field Mappings
Define custom field mappings for special cases:
@FieldName("user_name")
String name;
Embedded Objects
Support for embedded objects to organize related fields:
class User {
@Embedded
Address address;
}
class Address {
String street;
String city;
String country;
}