Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 467новых вакансий за сутки·93 721вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 267
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 129
  • Облачные технологии14 088
  • QA вакансии3 457
  • Backend вакансии2 115
  • Инженер данных1 805
  • Продакт-менеджер1 262

Разработка

  • Android1 865
  • iOS1 698
  • Fullstack вакансии989
  • AI вакансии949
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 660
  • Java6 550
  • Node.js2 020
  • .NET1 722
  • Kotlin1 619
  • Rust1 455
  • C#711
  • PHP683
  • C++572

DevOps и инфраструктура

  • Kubernetes7 769
  • DevOps вакансии6 056
  • Linux-инфраструктура5 493
  • Terraform / IaC4 266
  • CI/CD3 250
  • Мониторинг и Observability1 788
  • SRE567
  • Кибербезопасность453

Аналитика и данные

  • Data Scientist1 141
  • Бизнес-аналитик927
  • Аналитик данных854
  • Системный аналитик153

Другие направления

  • Проджект-менеджер616
  • UI/UX дизайн146
  • Ручное тестирование14

По регионам

  • Вакансии в США44 281
  • Вакансии в Европе23 875
  • Вакансии в Канаде4 475
  • Работа в России3 922

По формату

  • Удалённые вакансии75 035
  • Релокация в США44 281
  • Гибридная работа12 401
  • Офисная работа7 079

По уровню

  • Senior вакансии42 679
  • Middle вакансии20 894
  • Junior вакансии6 722

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Spring FrameworkВсе вопросы
Spring FrameworkMiddleТеория

В чём разница между JdbcTemplate Spring и Spring Data JPA?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

JdbcTemplate — тонкая обёртка над JDBC с ручным SQL и маппингом; Spring Data JPA генерирует запросы из имён методов поверх Hibernate. JdbcTemplate выбирают для сложных/отчётных запросов и batch, Spring Data JPA — для стандартного CRUD со связями.

JdbcTemplate

Подключается через зависимость spring-jdbc. Требует ручного написания SQL и маппинга результатов:

@Repository
public class ProductJdbcRepository {
    private final JdbcTemplate jdbc;

    public ProductJdbcRepository(JdbcTemplate jdbc) {
        this.jdbc = jdbc;
    }

    public List<Product> findByCategory(String category) {
        String sql = """
            SELECT id, name, price, category
            FROM products
            WHERE category = ?
            ORDER BY price DESC
            """;
        return jdbc.query(sql,
            (rs, rowNum) -> new Product(
                rs.getLong("id"),
                rs.getString("name"),
                rs.getBigDecimal("price"),
                rs.getString("category")
            ),
            category
        );
    }

    public int save(Product p) {
        return jdbc.update(
            "INSERT INTO products (name, price, category) VALUES (?, ?, ?)",
            p.getName(), p.getPrice(), p.getCategory()
        );
    }
}

JdbcTemplate и Spring Data JPA: разные уровни абстракции

JdbcTemplate — тонкая обёртка над JDBC, которая убирает boilerplate (открытие соединения, обработка исключений, закрытие ресурсов), но оставляет разработчику полный контроль над SQL. Spring Data JPA работает поверх JPA-провайдера (обычно Hibernate), скрывает SQL полностью и генерирует запросы из имён методов или JPQL/HQL.

Spring Data JPA

Подключается через spring-boot-starter-data-jpa. Требует JPA-сущности и интерфейс репозитория:

@Entity
@Table(name = "products")
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private BigDecimal price;
    private String category;
    // getters, setters
}

public interface ProductRepository extends JpaRepository<Product, Long> {
    // Генерируется автоматически из имени метода:
    List<Product> findByCategoryOrderByPriceDesc(String category);

    // JPQL-запрос:
    @Query("SELECT p FROM Product p WHERE p.price < :maxPrice")
    List<Product> findCheaperThan(@Param("maxPrice") BigDecimal maxPrice);

    // Нативный SQL:
    @Query(value = "SELECT * FROM products WHERE category = :cat", nativeQuery = true)
    List<Product> findByCategoryNative(@Param("cat") String category);
}

Когда что выбирать

  • JdbcTemplate: сложные запросы с агрегацией, оконными функциями, CTE, хранимыми процедурами; высоконагруженные batch-операции; легаси-схемы, плохо ложащиеся на ORM; работа с несколькими схемами одновременно.
  • Spring Data JPA: CRUD-операции над чётко определёнными сущностями; нужна пагинация и сортировка из коробки (Pageable); аудит (@CreatedDate, @LastModifiedBy); проекции и DTO через интерфейсы.
  • Оба вместе: в одном проекте допустимо использовать JpaRepository для стандартных операций и JdbcTemplate для отчётных запросов.

Производительность

Spring Data JPA через Hibernate использует кэш первого уровня (EntityManager) и может делать N+1 запросы при навигации по связям. JdbcTemplate не кэширует ничего — каждый вызов идёт в базу напрямую, что делает поведение предсказуемым.

Подводные камни

  • N+1 в Spring Data JPA: загрузка коллекций LAZY внутри цикла приводит к N+1 запросам. Исправляется через @EntityGraph, JOIN FETCH или batch-fetching.
  • OpenEntityManagerInView: по умолчанию включён в Spring Boot и держит сессию Hibernate открытой до конца HTTP-ответа. Это маскирует N+1 и вызывает проблемы в production — лучше отключить (spring.jpa.open-in-view=false).
  • JdbcTemplate и SQL-инъекции: параметры передавайте только через ? или именованные параметры в NamedParameterJdbcTemplate, никогда через конкатенацию строк.
  • Транзакции при смешивании: JdbcTemplate участвует в Spring-транзакции, если использует тот же DataSource. Но Hibernate и JDBC-соединение используют разные контексты — не смешивайте их в одной транзакции без явного flush.
  • Генерация схемы: spring.jpa.hibernate.ddl-auto=update опасен в production — Hibernate может добавить колонку, но никогда не удалит. Используйте Flyway или Liquibase.
  • Именованные методы в Spring Data: длинные имена вида findByFirstNameAndLastNameAndStatusOrderByCreatedAtDesc нечитаемы. Предпочтительнее @Query с JPQL.
  • Batch в Spring Data JPA: saveAll не даёт реального batch без spring.jpa.properties.hibernate.jdbc.batch_size=50 и @GeneratedValue(SEQUENCE) — IDENTITY-стратегия отключает batching Hibernate.

Частые вопросы на собеседовании

  • Что такое Spring Framework и какие проблемы он решает?
  • Что такое Spring Bean? Как IoC-контейнер Spring управляет бинами?
  • Что такое Spring MVC? Объясните жизненный цикл запроса в DispatcherServlet.
  • Что такое Inversion of Control (IoC) и как Spring его реализует?

Типичные ошибки

  • Путать термин «jdbctemplate vs spring data jpa» с соседним механизмом Spring Framework.
  • Не называть границу lifecycle, transaction, thread или request для «jdbctemplate vs spring data jpa».
  • Игнорировать production-эффекты «jdbctemplate vs spring data jpa»: latency, SQL shape, memory, security или observability.

Что проверяет интервьюер

  • Попросить объяснить механизм «jdbctemplate vs spring data jpa» на минимальном примере.
  • Проверить, видит ли кандидат failure mode и диагностику для «jdbctemplate vs spring data jpa».
  • Уточнить, какие настройки или API меняют «jdbctemplate vs spring data jpa» в реальном сервисе.

Как вы знаете этот вопрос?

Проверить себя по теме Spring Framework →

Источники

  • https://docs.spring.io/spring-framework/reference/data-access/jdbc/core.html
  • https://docs.spring.io/spring-data/jpa/reference/repositories/core-concepts.html
←Предыдущий вопросЧто такое `@Qualifier` и когда его использовать?Следующий вопрос→Как сравнить Spring Framework с ближайшими backend-альтернативами по скорости разработки, производительности, экосистеме и эксплуатации?

Связанные темы

Spring Frameworkbackend-designpersistence-debugging