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») — меньше шаблонного кода, меньше ошибок.
• что такое DAO и почему сегодня чаще используют ORM вместо ручного JDBC (если дошёл до 2-го слоя).