Skip to main content

SQL Database

Overview

The Genesis Application Platform integrates with external SQL databases using JDBC.

The key features and benefits are:

  • Seamless Integration. Designed to work seamlessly with Genesis Request Servers and Event Handlers.
  • Flexible Usage. Supports multiple approaches, including passing in queries directly and hiding the database interactions behind an interface.

Sample usage

There are two main ways of accessing the database integration API:

Interface-based (repository module): define an interface with @SqlQuery / @SqlUpdate. You can then inject and use it in a request server, event handler or directly in code:

@RepositoryModule("my-connection")
interface TradeRepository {
@SqlQuery(namedQuery = "select * from trade")
suspend fun selectAllTrades(): List<Trade>
}

requestReply<Unit, Trade>("HELLO_WORLD") {
replyList { inject<TradeRepository>().selectAllTrades() }
}

Direct connection API: inject SqlDatabaseConnection and run queries or updates with parameters:

@Named("my-connection")
val connection: SqlDatabaseConnection = inject()

val trades = connection.query(
"select * from trade where status = :status",
mapOf("status" to "ACTIVE"),
Trade::class
).toList()

Ways to use SQL

  • Configuration — Set up jdbcUrl and connection properties for external SQL databases.
  • Repository modules — Interface-based access with @RepositoryModule, @SqlQuery, and @SqlUpdate.
  • Direct connection API — Low-level SqlDatabaseConnection, fluent query/statement API, and ExecutableQuery.