Java Разработка | Spring Boot Backend & Architecture. Программирование на Джава для Developer. IT Собеседования, Алгоритмы и Coding задачи. Уроки и курсы для роста в Tech.

@bookjava
💾 Spring Data JPA: SQL больше не нужен? Spring Data JPA это абстракция над Hibernate (который, в свою очередь, является реализацией JPA). Его главная киллер-фича: Генерация запросов из названий методов. 🏗 1. Сущность (@Entity) Сначала мы объясняем Java, как выглядит наша таблица. Обычный класс превращается в таблицу с помощью пары аннотаций. @Entity // Это таблица в БД @Table(name = "users") public class User { @Id // Это Primary Key @GeneratedValue(strategy = GenerationType.IDENTITY) // Авто-инкремент private Long id; private String email; private int age; private boolean active; // Геттеры, сеттеры... } 🪄 2. Репозиторий (Магия) Вместо написания класса UserDao, мы просто создаем интерфейс. public interface UserRepository extends JpaRepository<User, Long> { // Здесь пусто! Но методы уже есть. } Наследуясь от JpaRepository, вы сразу получаете готовые методы: 🔴 .save(user) - сохранить/обновить. 🔴 .findById(id) - найти по ID (возвращает Optional). 🔴 .findAll() - найти всех. 🔴 .deleteById(id) - удалить. Ни одной строчки SQL писать не пришлось! �� 🔮 3. Derived Queries (Запросы из имени) Что, если нужно найти пользователя по email? Или всех активных пользователей старше 18 лет? Вы просто пишете метод в интерфейсе с правильным названием, и Spring сам составляет SQL-запрос. public interface UserRepository extends JpaRepository<User, Long> { // SQL: SELECT * FROM users WHERE email = ? Optional<User> findByEmail(String email); // SQL: SELECT * FROM users WHERE active = true AND age > ? List<User> findByActiveTrueAndAgeGreaterThan(int age); // SQL: EXISTS (SELECT 1 FROM users WHERE email = ?) boolean existsByEmail(String email); } Синтаксис простой: find + By + ИмяПоля + Условие (если нужно). 🛠 4. Если магия не справилась (@Query) Иногда названия методов становятся слишком длинными и уродливыми (findByNameAndAgeAndActiveAnd...). Или нужен сложный JOIN. Тогда мы берем управление в свои руки и пишем запрос на JPQL (Java Persistence Query Language) - это SQL, но оперирующий классами, а не таблицами. @Query("SELECT u FROM User u WHERE u.email LIKE %:domain%") List<User> findUsersByEmailDomain(@Param("domain") String domain); ⚡ Транзакции (@Transactional) База данных требует транзакций (всё или ничего). В Spring Boot методы репозитория уже транзакционны (только на чтение). Если же вы в сервисе делаете несколько операций подряд (снять деньги, перевести деньги), вешайте @Transactional над методом сервиса. @Service public class PaymentService { @Transactional // Если упадет ошибка, все изменения откатятся public void transferMoney() { repo.withdraw(...); repo.deposit(...); } } 🔥 Итог Spring Data JPA убирает 90% рутинной работы с БД. 1. Создали @Entity. 2. Создали интерфейс extends JpaRepository. 3. Нужен поиск? Написали метод findByField. 4. Сложный запрос? Написали @Query. #SpringBoot #JPA #Hibernate #Database #SQL 👉 @BookJava
Если у вас установлено приложение,
вы можете сразу перейти в канал