A jOOQ-CodeGenerator to create vertx-ified DAOs and POJOs!
Perform all CRUD-operations asynchronously and convert your POJOs from/into a io.vertx.core.json.JsonObject
using the API and
driver of your choice.
Before you start generating code using vertx-jooq, you have to answer these questions:
-jdbc
suffix.-reactive
modules.io.vertx.codegen.annotations.@DataObject
-annotations for your POJOsOnce you made your choice, you can start to configure the code-generator. This can be either done programmatically or using a maven- / gradle-plugin (recommended way). Please check the documentation in the module of the API and driver of your choice how to set it up and how to use it:
vertx-jooq-classic-jdbc
vertx-jooq-classic-reactive
vertx-jooq-rx-jdbc
vertx-jooq-rx-reactive
vertx-jooq-rx3-jdbc
vertx-jooq-rx3-reactive
vertx-jooq-mutiny-jdbc
vertx-jooq-mutiny-reactive
Once the generator is set up, it can create DAOs like in the code snippet below (classic-API, JDBC, no dependency injection):
//Setup your jOOQ configuration
Configuration configuration = ...
//setup Vertx
Vertx vertx = Vertx.vertx();
//instantiate a DAO (which is generated for you)
SomethingDao dao = new SomethingDao(configuration,vertx);
//fetch something with ID 123...
dao.findOneById(123)
.onComplete(res->{
if(res.succeeded()){
vertx.eventBus().send("sendSomething", res.result().toJson())
}else{
System.err.println("Something failed badly: "+res.cause().getMessage());
}
});
//maybe consume it in another verticle
vertx.eventBus().<JsonObject>consumer("sendSomething", jsonEvent->{
JsonObject message = jsonEvent.body();
//Convert it back into a POJO...
Something something = new Something(message);
//... change some values
something.setSomeregularnumber(456);
//... and update it into the DB
Future<Integer> updatedFuture = dao.update(something);
});
//or do you prefer writing your own type-safe SQL? Use the QueryExecutor from the DAO...
ClassicQueryExecutor queryExecutor = dao.queryExecutor();
//... or create a new one when there is no DAO around :)
queryExecutor = new JDBCClassicGenericQueryExecutor(configuration,vertx);
Future<Integer> updatedCustom = queryExecutor.execute(dslContext ->
dslContext
.update(Tables.SOMETHING)
.set(Tables.SOMETHING.SOMEREGULARNUMBER,456)
.where(Tables.SOMETHING.SOMEID.eq(something.getSomeid()))
.execute()
);
//check for completion
updatedCustom.onComplete(res->{
if(res.succeeded()){
System.out.println("Rows updated: "+res.result());
}else{
System.err.println("Something failed badly: "+res.cause().getMessage());
}
});
More examples can be found here, here and here.
Checkout this repository to figure out how to utilize vertx-jooq to create Quarkus-compatible classes.
The generator will omit datatypes that it does not know, e.g. java.sql.Timestamp
. To fix this, you can subclass the generator, handle these types and generate the code using your generator.
See the handleCustomTypeFromJson
and handleCustomTypeToJson
methods in the AbstractVertxGenerator
or checkout the CustomVertxGenerator
from the tests.
Starting with version 6.4.0
, vertx-jooq implicitly requires Java 11, as this is the minimum required version by the non-commercial version of jOOQ 3.15
.
If you're stuck with Java 8, the latest version you can use is 6.3.0
.
Yes! There are many integration tests that cover most usecases. Check them out if you're interested.
The tests are executed against two docker containers. Please refer to this readme of how to set them up.
Increase your file limits. Unfortunately the solution differs by each OS version, so you have to do some research.
This library comes without any warranty - just take it or leave it. Also, the author is neither connected to the company behind vertx nor the one behind jOOQ.