PostgreSQL Integration
This guide will walk you through creating a REST API using Java and the Vert.x framework, connecting to a PostgreSQL database. The API will have two endpoints:
GET /api/getUserData
: Retrieves user data from theusers
table based on the provideduser_id
parameter.POST /api/updateUser
: Updates user data in theusers
table based on the provideduser_id
,fullname
, andemail
parameters.
Prerequisites:
- Java 11 or higher
- Basic understanding of Java programming
- Familiarity with REST API concepts
- PostgreSQL database set up
Steps:
- Create a Vert.x project: Use the
vertx-quickstart
tool to create a basic Vert.x project:
vertx-quickstart --lang java --name my-api
- Add dependencies: Add the following dependencies to your project’s
pom.xml
file:
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
<version>${vertx.version}</version>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-pg-client</artifactId>
<version>${vertx.version}</version>
</dependency>
- Define data models: Create a
models.java
file to define the data structures for users:
public class User {
private int userId;
private String fullname;
private String email;
// Getters and setters omitted for brevity
}
- Implement database access: Create a
db.java
file for database operations:
import io.vertx.core.Future;
import io.vertx.pgclient.PgClient;
import io.vertx.pgclient.pool.Pool;
import java.util.Optional;
public class Database {
private final Pool pool;
public Database(Pool pool) {
this.pool = pool;
}
public Future<Optional<User>> getUserData(int userId) {
return pool.query("SELECT * FROM users WHERE user_id = $1", new Integer[]{userId})
.execute()
.flatMap(rows -> {
if (rows.rowCount() == 1) {
return Future.succeededFuture(new User(
rows.iterator().next().getInt("user_id"),
rows.iterator().next().getString("fullname"),
rows.iterator().next().getString("email")
));
} else {
return Future.failedFuture(new RuntimeException("User not found"));
}
});
}
public Future<Void> updateUser(User user) {
return pool.query("UPDATE users SET fullname = $1, email = $2 WHERE user_id = $3",
new String[]{user.getFullname(), user.getEmail(), String.valueOf(user.getUserId())})
.execute()
.flatMap(rows -> {
if (rows.rowCount() == 1) {
return Future.succeededFuture();
} else {
return Future.failedFuture(new RuntimeException("User not found"));
}
});
}
}
- Create route handlers: Create a
routes.java
file to define the API routes and handlers: “`java
import io.vertx.core.Future;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.RoutingContext;
import io.vertx.pgclient.pool.Pool;
import java.util.logging.Logger; public class Routes { private static final Logger LOGGER = Logger.getLogger(Routes.class.getName()); private final Router router;
private final Database database; public Routes(Router router, Database database) {
this.router = router;
this.database = database;
} public void registerRoutes() {
router.get(“/api/getUserData/:userId”, this::getUserDataHandler);
router.post(“/api/updateUser”, this::updateUserHandler);
} private void getUserDataHandler(RoutingContext context) {
int userId = Integer
MySQL Integration
This guide will walk you through creating a REST API using Java and the Vert.x framework, connecting to a MySQL database. The API will have two endpoints:
GET /api/getUserData
: Retrieves user data from theusers
table based on the provideduser_id
parameter.POST /api/updateUser
: Updates user data in theusers
table based on the provideduser_id
,fullname
, andemail
parameters.
Prerequisites:
- Java 11 or higher
- Basic understanding of Java programming
- Familiarity with REST API concepts
- MySQL database set up
Steps:
- Create a Vert.x project: Use the
vertx-quickstart
tool to create a basic Vert.x project:
vertx-quickstart --lang java --name my-api
- Add dependencies: Add the following dependencies to your project’s
pom.xml
file:
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
<version>${vertx.version}</version>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-mysql-client</artifactId>
<version>${vertx.version}</version>
</dependency>
- Define data models: Create a
models.java
file to define the data structures for users:
public class User {
private int userId;
private String fullname;
private String email;
// Getters and setters omitted for brevity
}
- Implement database access: Create a
db.java
file for database operations:
import io.vertx.core.Future;
import io.vertx.mysql.client.MySQLConnectOptions;
import io.vertx.mysql.client.MySQLConnection;
import io.vertx.mysql.client.Pool;
import java.util.Optional;
public class Database {
private final Pool pool;
public Database(Pool pool) {
this.pool = pool;
}
public Future<Optional<User>> getUserData(int userId) {
return pool.query("SELECT * FROM users WHERE user_id = ?", new Integer[]{userId})
.execute()
.flatMap(rows -> {
if (rows.result().size() == 1) {
return Future.succeededFuture(new User(
rows.result().get(0).getInteger("user_id"),
rows.result().get(0).getString("fullname"),
rows.result().get(0).getString("email")
));
} else {
return Future.failedFuture(new RuntimeException("User not found"));
}
});
}
public Future<Void> updateUser(User user) {
return pool.query("UPDATE users SET fullname = ?, email = ? WHERE user_id = ?",
new String[]{user.getFullname(), user.getEmail(), String.valueOf(user.getUserId())})
.execute()
.flatMap(rows -> {
if (rows.result().size() == 1) {
return Future.succeededFuture();
} else {
return Future.failedFuture(new RuntimeException("User not found"));
}
});
}
}
- Create route handlers: Create a
routes.java
file to define the API routes and handlers: “`java
import io.vertx.core.Future;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.RoutingContext;
import io.vertx.mysql.client.Pool;
import java.util.logging.Logger; public class Routes { private static final Logger LOGGER = Logger.getLogger(Routes.class.getName()); private final Router router;
private final Database database; public Routes(Router router, Database database) {
this.router = router;
this.database = database;
} public void registerRoutes() {
router.get(“/api/getUserData/:userId”, this::getUserDataHandler);
router.post(“/api/updateUser”, this::updateUserHandler);
}
Leave a Reply