Совет по Java 💡
С помощью библиотеки Jinq (https://jinq.org) вы можете писать запросы к базам данных, используя потоки Java. Она обеспечивает стиль запросов, схожий с известной библиотекой .NET LINQ. Конечно, вы можете легко интегрировать Jinq с Spring Boot.
#java #jpa #streams
👉@BookJava
С помощью библиотеки Jinq (https://jinq.org) вы можете писать запросы к базам данных, используя потоки Java. Она обеспечивает стиль запросов, схожий с известной библиотекой .NET LINQ. Конечно, вы можете легко интегрировать Jinq с Spring Boot.
#java #jpa #streams
👉@BookJava
🔥9❤3👍2👏2
Совет по Java 💡
Хотите создавать JPA-запросы с помощью стандартных потоков Java? Вы можете использовать библиотеку JPAstreamer (https://jpastreamer.org). Она может быть интегрирована, например, в Spring Boot.
#jpa #java #streams #hibernate
👉@BookJava
Хотите создавать JPA-запросы с помощью стандартных потоков Java? Вы можете использовать библиотеку JPAstreamer (https://jpastreamer.org). Она может быть интегрирована, например, в Spring Boot.
#jpa #java #streams #hibernate
👉@BookJava
👍8
@Hibernate можно использовать только для отношений, но не для простых (базовых) атрибутов. Чтобы она работала и для полей, необходимо использовать байткод-энхансмент через плагин. В этом случае поля, отмеченные как
lazy, будут загружаться при первом обращении к ним.#Java #JPA
👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
💾 Spring Data JPA: SQL больше не нужен?
Spring Data JPA это абстракция над Hibernate (который, в свою очередь, является реализацией JPA).
Его главная киллер-фича: Генерация запросов из названий методов.
🏗 1. Сущность (
Сначала мы объясняем Java, как выглядит наша таблица. Обычный класс превращается в таблицу с помощью пары аннотаций.
🪄 2. Репозиторий (Магия)
Вместо написания класса
Наследуясь от
🔴
🔴
🔴
🔴
Ни одной строчки SQL писать не пришлось! 😎
🔮 3. Derived Queries (Запросы из имени)
Что, если нужно найти пользователя по email? Или всех активных пользователей старше 18 лет?
Вы просто пишете метод в интерфейсе с правильным названием, и Spring сам составляет SQL-запрос.
Синтаксис простой:
🛠 4. Если магия не справилась (
Иногда названия методов становятся слишком длинными и уродливыми (
Тогда мы берем управление в свои руки и пишем запрос на JPQL (Java Persistence Query Language) - это SQL, но оперирующий классами, а не таблицами.
⚡ Транзакции (
База данных требует транзакций (всё или ничего).
В Spring Boot методы репозитория уже транзакционны (только на чтение).
Если же вы в сервисе делаете несколько операций подряд (снять деньги, перевести деньги), вешайте
🔥 Итог
Spring Data JPA убирает 90% рутинной работы с БД.
1. Создали
2. Создали интерфейс
3. Нужен поиск? Написали метод
4. Сложный запрос? Написали
#SpringBoot #JPA #Hibernate #Database #SQL
📲 Мы в MAX
👉@BookJava
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
📲 Мы в MAX
👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👎4