Connessione a Mysql e MariaDB in Java e Quarkus

Mattepuffo's logo
Connessione a Mysql e MariaDB in Java e Quarkus

Connessione a Mysql e MariaDB in Java e Quarkus

Quarkus è uno dei vari web framework per Java.

In questo periodo sta andando parecchio di moda, e devo dire che ha il suo perchè.

O almeno dai pochi test che ho fatto; unica cosa che non mi sta piacendo è la documentazione, che trovo scarna e confusionaria.

Ad esempio non spiega come usare bene JDBC e AgroalDataSource per eseguire una query su db, cosa che faremo in questo articolo.

Se usate Maven, cosa probabile, aggiungete queste dipendenze:

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-agroal</artifactId>
</dependency>

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-jdbc-mariadb</artifactId>
</dependency>

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-jdbc-mysql</artifactId>
</dependency>

Vi ho messo sia MySQL che MariaDB, ma non so ci sono reali differenze; se invece usate un altro db dovete solo cambiare il nome della dipendenza.

Per la configurazione uso application.properties:

quarkus.datasource.db-kind=mysql
quarkus.datasource.jdbc.url=jdbc:mysql://HOST:3306/DB_NOME
quarkus.datasource.username=USER
quarkus.datasource.password=PWD

A questo punto creiamo una classe "entity":

package com.mp.models;

public class Persona {

  private int id;

  private String email;

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getEmail() {
    return email;
  }

  public void setEmail(String email) {
    this.email = email;
  }
}

Prossimo step un service:

package com.mp;

import com.mp.models.Persona;
import io.agroal.api.AgroalDataSource;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

@ApplicationScoped
public class PersonaService {

  @Inject
  AgroalDataSource dataSource;

  public List<Persona> getAll() throws SQLException {
    List<Persona> list = new ArrayList<>();

    try (Connection connection = dataSource.getConnection()) {
      Statement st = connection.createStatement();
      ResultSet rs = st.executeQuery("SELECT * FROM persone");

      while (rs.next()) {
        Persona persona = new Persona();
        persona.setId(rs.getInt(1));
        persona.setEmail(rs.getString(2));

        list.add(persona);
      }
    }

    return list;
  }

}

Noi abbiamo una sola connessione, quindi AgroalDataSource sa qual'è quella di default.

Poi il nostro controller:

package com.mp;

import com.mp.models.Persona;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

import java.sql.SQLException;
import java.util.List;

@Path("/")
public class TestQuarkus {

  @Inject
  PersonaService personaService;

  @GET
  @Path("/persone")
  @Produces(MediaType.APPLICATION_JSON)
  public List<Persona> getAll() throws SQLException {
    return personaService.getAll();
  }
}

Enjoy!


Condividi

Commentami!