Java + MySQL

Connect Java to MySQL, build a small REST API, and integrate a simple frontend form.

What you'll learn

  • Install and connect to MySQL
  • Use JDBC in a plain Java program
  • Build a Spring Boot REST API
  • Submit data from a frontend form

Architecture flow

Frontend: HTML/JS Java Spring Boot REST API MySQL JDBC/JPA fetch() POST/GET

Setup

  1. Install JDK 17+ and MySQL Server (start MySQL; note username/password).
  2. Install an IDE (IntelliJ/Eclipse/VS Code) and Maven.
  3. Choose: plain Java (JDBC) or Spring Boot (Web + JPA + MySQL).

Database schema

Create a demo_db database and a users table.

SQL
CREATE DATABASE IF NOT EXISTS demo_db;
USE demo_db;

CREATE TABLE IF NOT EXISTS users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  email VARCHAR(150) UNIQUE NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Option A: Plain Java (JDBC)

Add MySQL Connector/J. Maven example:

pom.xml dependency
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-j</artifactId>
  <version>8.3.0</version>
</dependency>

Connect and insert/select data:

JdbcDemo.java
import java.sql.*;

public class JdbcDemo {
  public static void main(String[] args) throws Exception {
    String url = "jdbc:mysql://localhost:3306/demo_db?useSSL=false&allowPublicKeyRetrieval=true";
    String user = "root";
    String pass = "password";

    try (Connection conn = DriverManager.getConnection(url, user, pass)) {
      String insert = "INSERT INTO users(name, email) VALUES (?, ?)";
      try (PreparedStatement ps = conn.prepareStatement(insert, Statement.RETURN_GENERATED_KEYS)) {
        ps.setString(1, "Alice");
        ps.setString(2, "alice@example.com");
        ps.executeUpdate();
        try (ResultSet keys = ps.getGeneratedKeys()) {
          if (keys.next()) System.out.println("Inserted id=" + keys.getLong(1));
        }
      }

      try (PreparedStatement ps = conn.prepareStatement("SELECT id,name,email,created_at FROM users");
           ResultSet rs = ps.executeQuery()) {
        while (rs.next()) {
          System.out.println(rs.getInt("id") + ": " + rs.getString("name") + " <" + rs.getString("email") + ">");
        }
      }
    }
  }
}

Option B: Spring Boot REST API

pom.xml
<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
  </dependency>
</dependencies>
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/demo_db?useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
User.java
import jakarta.persistence.*;

@Entity
@Table(name = "users")
public class User {
  @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  private String name;
  @Column(unique = true)
  private String email;

  public Long getId() { return id; }
  public void setId(Long id) { this.id = id; }
  public String getName() { return name; }
  public void setName(String name) { this.name = name; }
  public String getEmail() { return email; }
  public void setEmail(String email) { this.email = email; }
}
UserRepository.java
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {}
UserController.java
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/api/users")
@CrossOrigin(origins = "*")
public class UserController {
  private final UserRepository repo;
  public UserController(UserRepository repo) { this.repo = repo; }

  @PostMapping
  public User create(@RequestBody User u) { return repo.save(u); }

  @GetMapping
  public List<User> all() { return repo.findAll(); }
}

Frontend form

fetch() example
const form = document.getElementById('demo-form');

form.addEventListener('submit', async (e) => {
  e.preventDefault();
  const body = {
    name: form.name.value.trim(),
    email: form.email.value.trim()
  };
  const res = await fetch('http://localhost:8080/api/users', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(body)
  });
  const json = await res.json();
  console.log(json);
});

Test

  1. Run MySQL and ensure the schema exists.
  2. Run JDBC program or start Spring Boot app on port 8080.
  3. Use the frontend code or Postman to POST to /api/users.
  4. GET /api/users to verify records.