С какими типами баз данных и технологиями доступа к ним вы работали?

«С какими типами баз данных и технологиями доступа к ним вы работали?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Работал с реляционными (SQL) и нереляционными (NoSQL) базами данных, используя как низкоуровневые драйверы, так и ORM-фреймворки.

1. Реляционные СУБД (MySQL, PostgreSQL, Oracle):

  • JDBC: Низкоуровневый API для выполнения SQL.
    String sql = "UPDATE users SET name = ? WHERE id = ?";
    try (PreparedStatement stmt = connection.prepareStatement(sql)) {
        stmt.setString(1, "Alice");
        stmt.setInt(2, 101);
        int rowsUpdated = stmt.executeUpdate(); // Важно: используем PreparedStatement для безопасности
    }
  • JPA / Hibernate: ORM для маппинга объектов на таблицы.
    @Entity
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        private String name;
        // Геттеры и сеттеры
    }
    // Запрос через EntityManager
    List<User> users = em.createQuery("SELECT u FROM User u", User.class).getResultList();

2. NoSQL СУБД:

  • MongoDB (документная): Работа через Spring Data MongoDB или нативный драйвер.
  • Redis (ключ-значение): Использовал как кэш и брокер сообщений (через Spring Data Redis, RedisTemplate).

Ключевые практики:

  • Использование пулов соединений (HikariCP) для производительности.
  • Транзакционность (@Transactional) для обеспечения целостности данных.
  • Оптимизация запросов: анализ EXPLAIN, создание индексов, избегание N+1 проблемы в Hibernate.
  • Миграции схемы с помощью Flyway или Liquibase.