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!
java maven quarkus mysql mariadb agroal
Commentami!