Exposed is a Kotlin SQL ORM library by JetBrains that provides a type-safe DSL for database operations, an optional DAO/entity layer, schema migration tooling, and multi-database support. The architecture is modular: a core module (exposed-core) defines the SQL DSL, column types, expression trees, and vendor dialects; separate modules implement synchronous JDBC (exposed-jdbc) and reactive R2DBC (exposed-r2dbc) backends; the DAO layer (exposed-dao, exposed-dao-r2dbc) adds entity management with caching, relationships, and lifecycle hooks; additional modules provide encryption, JSON, money types, Spring Boot auto-configuration, and Gradle/Maven plugins for migration generation. The library supports H2, MySQL, MariaDB, PostgreSQL, Oracle, SQL Server, SQLite, and Amazon Redshift, with extensive dialect-specific SQL generation and type mapping. Key entry points include Database.connect() for JDBC and R2dbcDatabase.connect() for R2DBC, transaction scopes (transaction {} / suspendTransaction {}), table/column definitions via DSL functions, and entity classes (IntEntity, UuidEntity, etc.) for the DAO pattern. Data flows through a query builder that constructs parameterized SQL statements, which are then executed by backend-specific executables (BlockingExecutable for JDBC, SuspendExecutable for R2DBC). The library also provides statement interceptors for logging and monitoring, and a migration utility that can generate Flyway-compatible scripts from table definitions. External dependencies include JDBC drivers for each supported database, R2DBC drivers, Spring Framework (for the Spring Boot starters and transaction integration), and optional libraries for encryption (AES, BCrypt, Argon2). The build system is Gradle with Kotlin DSL, and the project publishes multiple artifacts to Maven Central. The codebase demonstrates strong engineering practices with extensive cross-database test suites, parameterized tests, and continuous integration across multiple database containers.
Querydsl is a type-safe query DSL framework for Java and Scala, with compile-time code generation via annotation processing. It provides a fluent, strongly-typed API for constructing queries across multiple backends: JPA/Hibernate, SQL (with many dialects), JDO, MongoDB, Lucene, in-memory collections, and spatial data. The library uses a core expression tree (Expression, Path, Operation) and visitors for serialization to backend-specific languages (JPQL, SQL, MongoDB query, Lucene query). Code generation produces static Q-types from annotated domain classes, enabling IDE-friendly autocompletion and refactoring safety. The architecture is modular: querydsl-core provides the DSL foundation, querydsl-apt handles APT, querydsl-codegen offers generic code generation utilities, and backend-specific modules (e.g., querydsl-jpa, querydsl-sql) supply serializers and templates. Despite its breadth, the core design is clean and extensible, with well-defined interfaces for operators, templates, and visitors. Some modules (e.g., Lucene 3/4, Morphia) show lower activity and dual spatial library support (JTS old/new) indicates ongoing migration. Overall, Querydsl is a mature, highly-crafted library that significantly simplifies database querying in type-safe Java applications.