Какую базу данных вы использовали в последнем проекте и как с ней работали?

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

Ответ

В последнем проекте в качестве основной реляционной базы данных использовалась PostgreSQL. Для взаимодействия с ней применялся стек Spring Data JPA поверх Hibernate.

Пример сущности и репозитория:

// Сущность (Entity)
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true)
    private String email;

    // Другие поля, связи (@OneToMany, @ManyToOne)
    // Getters and Setters
}

// Репозиторий (Spring Data JPA)
public interface UserRepository extends JpaRepository<User, Long> {
    // Декларативный метод для поиска
    Optional<User> findByEmail(String email);

    // Пример запроса с @Query (JPQL)
    @Query("SELECT u FROM User u WHERE u.createdAt > :date")
    List<User> findUsersCreatedAfter(@Param("date") LocalDateTime date);
}

Дополнительные инструменты и практики:

  • Миграции схемы: Использовали Flyway для версионирования и применения изменений структуры БД (DDL).
  • Сложные запросы: Для динамических или сложных запросов применяли QueryDSL или нативные SQL-запросы (@Query(nativeQuery = true)).
  • Кэширование: Для повышения производительности часто запрашиваемых данных подключали Redis в качестве кэша второго уровня (L2 cache) или для хранения сессий.