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
Setup
- Install JDK 17+ and MySQL Server (start MySQL; note username/password).
- Install an IDE (IntelliJ/Eclipse/VS Code) and Maven.
- 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);
});
Resources
Java + Spring
Test
- Run MySQL and ensure the schema exists.
- Run JDBC program or start Spring Boot app on port 8080.
- Use the frontend code or Postman to POST to
/api/users. - GET
/api/usersto verify records.