diff --git a/pom.xml b/pom.xml index a318e63..7714520 100644 --- a/pom.xml +++ b/pom.xml @@ -49,6 +49,13 @@ 7.0.0 + + + commons-dbutils + commons-dbutils + 1.8.1 + + org.mariadb.jdbc diff --git a/src/main/java/dev/mduchene/App.java b/src/main/java/dev/mduchene/App.java index 9c2d32d..c3fcc3d 100644 --- a/src/main/java/dev/mduchene/App.java +++ b/src/main/java/dev/mduchene/App.java @@ -1,6 +1,15 @@ package dev.mduchene; import io.javalin.Javalin; +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ScalarHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; /** Hello world! */ public class App { @@ -12,6 +21,58 @@ public class App { .password("root") .build(); - var app = Javalin.create(cnf -> {}).get("/", ctx -> ctx.result("Hello World")).start(3001); + db.init(); + + var app = Javalin.create(cnf -> {}); + app.before( + ctx -> { + Connection connection = db.getConnection(); + ctx.attribute("connection", connection); + }); + app.after( + ctx -> { + Connection connection = ctx.attribute("connection"); + if (connection != null) { + DbUtils.commitAndCloseQuietly(connection); + } + }); + + app.exception( + Exception.class, + (e, ctx) -> { + LoggerFactory.getLogger(App.class).error("error", e); + + Connection connection = ctx.attribute("connection"); + if (connection != null) { + DbUtils.rollbackAndCloseQuietly(connection); + } + ctx.status(500); + }); + + app.get( + "/", + ctx -> { + var r = new QueryRunner(); + Integer query = + r.query( + (Connection) ctx.attribute("connection"), + "SELECT 1", + resultSet -> { + System.out.println("hello world"); + if (resultSet.next()) return resultSet.getInt(1); + + return null; + }); + + ctx.result(query.toString()); + }); + + app.get( + "/error", + ctx -> { + throw new RuntimeException("error"); + }); + + app.start(3001); } } diff --git a/src/main/java/dev/mduchene/Db.java b/src/main/java/dev/mduchene/Db.java index d01f06f..55738d2 100644 --- a/src/main/java/dev/mduchene/Db.java +++ b/src/main/java/dev/mduchene/Db.java @@ -2,13 +2,19 @@ package dev.mduchene; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; +import org.slf4j.LoggerFactory; import java.sql.Connection; +import java.sql.SQLException; public class Db { private HikariDataSource dataSource; private Db() {} + public void init() { + + } + public static class Builder { private String url; private String user; @@ -54,4 +60,5 @@ public class Db { connection.setAutoCommit(false); return connection; } + }