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

Курсы

Программирование
Flutter Mobile Developer Подготовка к сертификации Oracle Java Programmer (OCAJP)
-8%
Алгоритмы и структуры данных
-12%
Web-разработчик на Python
-11%
Архитектура и шаблоны проектирования
-14%
JavaScript Developer. Basic Супер-интенсив «СУБД в высоконагруженных системах»
-18%
iOS-разработчик. Базовый курс
-23%
Разработчик на Spring Framework
-23%
Python Developer. Basic
-16%
C# ASP.NET Core разработчик
-18%
Разработчик программных роботов (RPA) на базе UiPath и PIX
-6%
Android Developer. Basic
-10%
C++ Developer. Professional Разработчик C# AWS для разработчиков Software Architect Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов Backend-разработка на Kotlin React.js Developer Разработчик Node.js Нереляционные базы данных Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Advanced Fullstack JavaScript developer
Инфраструктура
PostgreSQL
-10%
IoT-разработчик
-12%
Administrator Linux. Professional
-11%
Базы данных
-19%
Administrator Linux.Basic
-18%
Супер-интенсив «СУБД в высоконагруженных системах»
-18%
Разработчик программных роботов (RPA) на базе UiPath и PIX
-6%
Сетевой инженер AWS для разработчиков Software Architect Reverse-Engineering. Professional CI/CD VOIP инженер Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes
Специализации Курсы в разработке Подготовительные курсы
+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 комментариев
Для комментирования необходимо авторизоваться