Java DataBase Connectivity: мощь чистого SQL | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Team Lead Архитектура и шаблоны проектирования Разработчик IoT C# Developer. Professional PostgreSQL Подготовка к сертификации Oracle Java Programmer (OCAJP) C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Symfony Framework Unity Game Developer. Basic JavaScript Developer. Professional Android Developer. Basic JavaScript Developer. Basic Java Developer. Professional Highload Architect Reverse-Engineering. Professional Java Developer. Basic PHP Developer. Professional Алгоритмы и структуры данных Framework Laravel Cloud Solution Architecture Vue.js разработчик Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool" PHP Developer. Basic
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK Дизайн сетей ЦОД Разработчик IoT PostgreSQL Экспресс-курс "Версионирование и командная работа с помощью Git"
-30%
Экспресс-курс «Введение в непрерывную поставку на базе Docker» Базы данных Reverse-Engineering. Professional Administrator Linux. Professional Network engineer Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool" Network engineer. Basic
Корпоративные курсы
Безопасность веб-приложений IT-Recruiter Дизайн сетей ЦОД Компьютерное зрение Разработчик IoT Вебинар CERTIPORT Machine Learning. Professional
-6%
NoSQL Пентест. Практика тестирования на проникновение Java QA Engineer. Базовый курс Руководитель поддержки пользователей в IT
-8%
SRE практики и инструменты Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Infrastructure as a code Супер-практикум по использованию и настройке GIT Промышленный ML на больших данных Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» BPMN: Моделирование бизнес-процессов Основы Windows Server
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Java DataBase Connectivity: мощь чистого SQL

Spring_Deep_6.11_site-5020-239eb9.png

Этот пост для тех, кто устал писать запросы в JDBC template и хочет мощи, которая есть в Spring Data JPA-репозиториях, но не может/не готов использовать JPA. А также для тех, кто устал разрабатывать сущности с JPA/Hibernate и хочет более душевного и близкого «к железу» SQL. Как ни странно, но для решения этих противоречивых с первого взгляда вопросов есть один способ — Spring Data JDBC.

Что такое Spring Data JDBC?

Для начала: • Это не ORM в классическом понимании; • Но это полноценный Spring Data Repository; • Не имеет никакого отношения к JPA, но схож по своей природе; • По сути, JdbcTemplate, обёрнутый в Spring Data; • Скорее, это MyBatis, и, кстати, поддержка его имеется.

Итак, рассмотрим пример репозитория на Spring Data. Как и все Spring Data репозитории, они начинаются с доменного класса:

@Table("persons")
public class Person {
    @Id
    private int id;
    @Column("name")
    private String name;

    // Конструкторы, геттеры и сеттеры (хотя сеттеры по документации не нужны)
}

Обратите внимание на аннотацию org.springframework.data.annotation.Id — это стандартная Spring Data аннотация для обозначения поля с ID. Кстати, она активно используется при работе с NoSQL базами данных.

org.springframework.data.relational.core.mapping.@Table и @Column — это, как ни странно, не JPA аннотации, а как раз аннотации Spring Data JDBC. Нетрудно догадаться, что эти аннотации (и без их наличия тоже) задают однозначно таблицы и колонки, из которых и будут браться сущности и данные.

Рассмотрим непосредственно репозиторий в лучших традициях Spring Data:

interface PersonRepository extends CrudRepository<Person, Long> {}

Собственно, всё! Предлагаю читателям самостоятельно убедиться, что этого достаточно для определения информации маппинга полей.

А как писать запросы?

Этим и занимается аннотация @Query, которую мы можем использовать и здесь:

interface PersonRepository extends CrudRepository<Person, Long> {
    @Query("SELECT p.id, p.name FROM person p")
    public List<Person> getAll();
}

Пользуйтесь мощью чистого SQL!

Хочется узнать больше? Задавайте вопросы в комментариях!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться