Карта / JDBC / CRUD-приложение

CRUD-приложение

CRUD — Create, Read, Update, Delete — четыре базовые операции с данными. Простой пример полного цикла работы с пользователями через чистый JDBC, без ORM:

class UserDao {
    private final Connection conn;
    UserDao(Connection conn) { this.conn = conn; }

    void create(String name, int age) throws SQLException {
        try (PreparedStatement stmt = conn.prepareStatement(
                "INSERT INTO users (name, age) VALUES (?, ?)")) {
            stmt.setString(1, name);
            stmt.setInt(2, age);
            stmt.executeUpdate();
        }
    }

    User read(int id) throws SQLException {
        try (PreparedStatement stmt = conn.prepareStatement(
                "SELECT id, name, age FROM users WHERE id = ?")) {
            stmt.setInt(1, id);
            try (ResultSet rs = stmt.executeQuery()) {
                if (rs.next()) {
                    return new User(rs.getInt("id"), rs.getString("name"), rs.getInt("age"));
                }
                return null;
            }
        }
    }

    void update(int id, int newAge) throws SQLException {
        try (PreparedStatement stmt = conn.prepareStatement(
                "UPDATE users SET age = ? WHERE id = ?")) {
            stmt.setInt(1, newAge);
            stmt.setInt(2, id);
            stmt.executeUpdate();
        }
    }

    void delete(int id) throws SQLException {
        try (PreparedStatement stmt = conn.prepareStatement(
                "DELETE FROM users WHERE id = ?")) {
            stmt.setInt(1, id);
            stmt.executeUpdate();
        }
    }
}
Копнуть глубже

Класс, инкапсулирующий доступ к данным одной таблицы (как UserDao выше), называется DAO (Data Access Object) — это устоявшийся паттерн: вся работа с конкретной таблицей собрана в одном месте, остальной код приложения не знает деталей SQL и работает с понятными методами create/read/update/delete.

Почему чистый JDBC сегодня редко пишут вручную. Этот код — то, что под капотом делает Hibernate/JPA автоматически: маппинг ResultSet в объект, управление соединениями, генерация SQL. Понимание ручного JDBC важно как фундамент (что именно ORM делает за тебя), но в реальных проектах почти всегда используют JPA/Hibernate (см. тему «@Entity, @Id») — меньше шаблонного кода, меньше ошибок.

🎤 Закрыл тему, если можешь объяснить:
• что означает CRUD и как выглядят все четыре операции через JDBC;
• что такое DAO и почему сегодня чаще используют ORM вместо ручного JDBC (если дошёл до 2-го слоя).