Библиотека джависта | Java, Spring, Maven, Hibernate

Description
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://t.me/proglibrary/9197
Учиться у нас: https://proglib.io/w/778f3dba

Обратная связь: @proglibrary_feedback_bot

По рекламе: @proglib_adv
Прайс: @proglib_advertising
Advertising
We recommend to visit
HAYZON
HAYZON
6 625 463 @hayzonn

💼 How to create capital and increase it using cryptocurrency

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
Мои каналы: @kriptofo @mazzafam

Last updated 6 часов назад

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 2 месяца, 3 недели назад

Новые и перспективные Web3 игры с добычей токенов.

Чат: https://t.me/Crypto_Wolf_Chat

Правила чата смотрите в описании чата.

Все свои вопросы направляйте в чат или главному модератору чата: @Exudna_118

По теме сотрудничества: @Zombini

Last updated 2 месяца, 1 неделя назад

1 month ago

*🔍 *Обработка исключений с помощью Try-With-Resources в Java

В Java 7 была представлена мощная конструкция Try-With-Resources, которая значительно упрощает управление ресурсами, такими как файлы, соединения с БД или сокеты. Это улучшение позволяет автоматически закрывать ресурсы, предотвращая утечки памяти. Любые объекты, реализующие интерфейс AutoCloseable, можно безопасно использовать в блоке try. Java сама вызовет метод close() в конце блока, даже если произошло исключение.

*📌 *Преимущества:

- Нет необходимости в блоках finally для ручного закрытия ресурсов.
- Можно использовать несколько ресурсов в одном блоке try.
- Исключает риск утечек, особенно при работе с внешними ресурсами.

try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) { String line = reader.readLine(); System.out.println(line); } catch (IOException e) { e.printStackTrace(); }

Этот подход не только уменьшает количество шаблонного кода, но и делает обработку исключений более предсказуемой. Для более сложных систем, где важно управление ресурсами, Try-With-Resources становится незаменимым инструментом.

💡 Try-With-Resources может комбинироваться с собственными классами, реализующими AutoCloseable, чтобы управлять закрытием любых типов ресурсов.

1 month ago

*💥 *Волшебные методы в Spring Data JPA: скрытые возможности работы с данными

В Spring Data JPA можно создавать "волшебные" методы в репозиториях, которые автоматически генерируют SQL-запросы на основе имени метода. Это очень мощный инструмент, который ускоряет разработку и упрощает работу с базой данных. Вместо написания SQL-запросов вручную, достаточно правильно написать название метода, и фреймворк создаст нужный SQL запрос.

*🔵 *Примеры возможностей:

1️⃣ Поиск по полю:

Метод:

findByEmail(String email)

Генерируемый запрос:

SELECT * FROM users WHERE email = ?;

2️⃣ Комбинирование условий (с помощью AND и OR):

Метод:

findByFirstNameAndLastName(String firstName, String lastName)

Генерируемый запрос:

SELECT * FROM users WHERE first\_name = ? AND last\_name = ?;

Метод:

findByAgeOrSalary(int age, int salary)

Генерируемый запрос:

SELECT * FROM users WHERE age = ? OR salary = ?;

3️⃣ Диапазоны значений:

Метод:

findByAgeBetween(int startAge, int endAge)

Генерируемый запрос:

SELECT * FROM users WHERE age BETWEEN ? AND ?;

4️⃣ Сравнение значений:

Метод:

findBySalaryGreaterThan(int salary)

Генерируемый запрос:

SELECT * FROM users WHERE salary > ?;

5️⃣Сортировка результатов:

Метод:

findByLastNameOrderByFirstNameAsc(String lastName)

Генерируемый запрос:

SELECT * FROM users WHERE last\_name = ? ORDER BY first\_name ASC;

6️⃣ Частичное совпадение:

Метод:

findByNameContaining(String keyword)

Генерируемый запрос:

SELECT * FROM users WHERE name LIKE '%?%';

7️⃣ Работа с NULL:

Метод:

findByMiddleNameIsNull()

Генерируемый запрос:

SELECT * FROM users WHERE middle\_name IS NULL;

8️⃣ Ограничение количества записей:

Метод:

findTop3BySalaryGreaterThan(int salary)

Генерируемый запрос:

SELECT * FROM users WHERE salary > ? LIMIT 3;

9️⃣ Поиск по коллекции значений:

Метод:

findByRoleIn(List<String> roles)

Генерируемый запрос:

SELECT * FROM users WHERE role IN (?);

⚠️ Недостатки использования волшебных методов:

- Ограниченная гибкость: Когда запросы становятся сложными, волшебные методы перестают быть удобными. Например, сложно создать метод для многоступенчатых операций, объединений или работы с подзапросами.
- Трудности с оптимизацией: Автоматически сгенерированные SQL-запросы могут быть не такими оптимальными, как вручную написанные. Это может негативно влиять на производительность приложения, особенно при работе с большими объёмами данных.
- Неочевидность логики: В сложных проектах имя метода может становиться длинным и трудночитаемым. Это усложняет понимание логики запроса, что может запутать других разработчиков, работающих с кодом.
- Отсутствие контроля: Разработчик не всегда контролирует точную структуру генерируемого запроса, что может привести к неожиданным результатам, особенно если в базе данных есть индексы или другие особенности структуры.

*🔼*Полезные советы:

- Используйте волшебные методы для простых запросов и CRUD-операций.
- Для более сложных случаев лучше использовать @Query и писать запросы вручную.

1 month ago

*ℹ️ *Что такое @Transactional в Spring?

@Transactional — это аннотация, которая управляет транзакциями в Spring. Она позволяет автоматически начать, зафиксировать или откатить транзакцию при выполнении бизнес-логики. Применяется к методам или классам, где важно обеспечить целостность данных.
*🔹 Как работает:*

Когда метод помечен @Transactional, Spring создает прокси-объект, который начинает транзакцию до выполнения метода и завершает её после. В случае исключения транзакция откатывается, если оно не является проверяемым (checked exception).

*🔹 Конфигурации @Transactional:*

▪️ Propagation (распространение):

- REQUIRED (по умолчанию): метод должен выполняться в существующей транзакции, если она есть, иначе создается новая.
- REQUIRES_NEW: всегда создает новую транзакцию, приостанавливая текущую.
- SUPPORTS: метод может выполняться в транзакции, но не требует её обязательного наличия.
- MANDATORY: требует существования транзакции, иначе будет выброшено исключение.
- NOT_SUPPORTED: метод выполняется без транзакции, даже если она существует.
- NEVER: запрещает выполнение метода в транзакции, иначе выбрасывается исключение.
- NESTED: позволяет создавать вложенные транзакции, которые могут быть откатаны отдельно от внешней.

▪️ Isolation (изолированность):

- DEFAULT: уровень изоляции БД по умолчанию.
- READ_UNCOMMITTED: минимальная изоляция, позволяет читать незавершенные изменения.
- READ_COMMITTED: запрещает чтение незавершенных транзакций.
- REPEATABLE_READ: гарантирует, что данные не изменятся во время транзакции.
- SERIALIZABLE: максимальная изоляция, исключает фантомные записи.

▪️ Timeout и Rollback:

timeout: ограничивает время выполнения транзакции (по умолчанию бесконечно).
rollbackFor/noRollbackFor: настраивают, какие исключения должны вызвать откат или нет.
*🔹 Когда @Transactional не сработает?*

- @Transactional не срабатывает, если метод с этой аннотацией вызывается внутри другого метода того же класса. Это связано с тем, что Spring использует прокси для управления транзакциями, и он активируется только при внешних вызовах. Когда метод вызывается из другого метода того же класса, прокси не задействуется, и транзакция не будет создана.
- Также нужно помнить, что аннотация не работает с private методами.

4 months ago

*✍️*✍️ Переписывая историю: от инструментов версионирования БД к практике**

Версионирование баз данных — это меры и процедуры для поддержания консистентности данных и схемы на протяжении всего жизненного цикла приложения. По мере изменения требований к приложению, меняются и требования к данным, и в этот момент необходимо прибегнуть к их версионированию.

Продолжение здесь

#туториал

4 months ago

*?*? Неожиданности в авторизации. Что скрывает Keycloak?**

Авторизация и регистрация пользователей — важная часть приложения как для юзеров, так и для безопасности. Но какие неожиданности содержит исходный код популярного Open Source решения для авторизации, и как они могут повлиять на работу приложения?

Продолжение тут

#туториал

6 months, 2 weeks ago
6 months, 3 weeks ago
We recommend to visit
HAYZON
HAYZON
6 625 463 @hayzonn

💼 How to create capital and increase it using cryptocurrency

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
Мои каналы: @kriptofo @mazzafam

Last updated 6 часов назад

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 2 месяца, 3 недели назад

Новые и перспективные Web3 игры с добычей токенов.

Чат: https://t.me/Crypto_Wolf_Chat

Правила чата смотрите в описании чата.

Все свои вопросы направляйте в чат или главному модератору чата: @Exudna_118

По теме сотрудничества: @Zombini

Last updated 2 месяца, 1 неделя назад