DAO (Data Access Object)
Паттерн проектирования, который используется для определения интерфейса, через который приложение может получать доступ к данным. Он предоставляет абстрактный уровень между приложением и хранилищем данных, позволяя приложению изолироваться от способа хранения и представления данных.
Обычно DAO определяет набор методов для выполнения операций с данными, таких как создание, чтение, обновление и удаление. Он может использовать различные технологии для хранения и получения данных, например, JDBC, Hibernate, JPA.
DAO обычно реализуется как отдельный слой в архитектуре приложения, который служит для управления данными и обеспечивает разделение слоев в приложении.
Паттерн проектирования, который используется для определения интерфейса, через который приложение может получать доступ к данным. Он предоставляет абстрактный уровень между приложением и хранилищем данных, позволяя приложению изолироваться от способа хранения и представления данных.
Обычно DAO определяет набор методов для выполнения операций с данными, таких как создание, чтение, обновление и удаление. Он может использовать различные технологии для хранения и получения данных, например, JDBC, Hibernate, JPA.
DAO обычно реализуется как отдельный слой в архитектуре приложения, который служит для управления данными и обеспечивает разделение слоев в приложении.
Задача на циклы
Дано целое число N и последовательность из N целых чисел. Найти второй по минимальности элемент.
Решение в комментах
Дано целое число N и последовательность из N целых чисел. Найти второй по минимальности элемент.
Решение в комментах
Что такое EntityManager?
Главный API для работы с JPA
Основные операции над Entity:
persist - добавление Entity под управление JPA
merge - метод для слияния существующей, если сущность не существует в контексте сущностей, то она будет добавлена
remove - удаление
refresh - обновление данных
detach - удаление из управление JPA
Главный API для работы с JPA
Основные операции над Entity:
persist - добавление Entity под управление JPA
merge - метод для слияния существующей, если сущность не существует в контексте сущностей, то она будет добавлена
remove - удаление
refresh - обновление данных
detach - удаление из управление JPA
Java Persistence API
Anonymous Quiz
22%
Это реализация Hibernate
59%
Набор интерфейсов для связи entity с БД
19%
Паттерн проектирования интерфейсов для доступа к данным
Зачем создали JPQL (Java Persistence Query Language) и почему не использовать SQL всегда?
jpql выполняет запросы на уровне объектов, а не таблиц, самое жирное преимущество,
то что он не привязан к какой конкретной бд, но на практике это нужно довольно редко.
jpql использует имена классов, sql имена таблиц и столбцов.
По факту jpql имеет ограничения по группировке и агрегированию по сравнению с sql.
Но у EntityManager есть много удобным методов и часто, если в проекте не spring data,
то используют jpql.
На картинке пример простого селекта.
В этом примере Person - это имя класса-сущности, а p - это псевдоним, который используется в запросе вместо имени класса. Запрос выбирает все объекты класса Person, у которых свойство age больше или равно 18, и возвращает их в списке adults.
Этот запрос может быть выполнен с помощью метода createQuery EntityManager и передачи ему строки JPQL. Затем можно дабавить результаты в List помощью метода getResultList.
jpql выполняет запросы на уровне объектов, а не таблиц, самое жирное преимущество,
то что он не привязан к какой конкретной бд, но на практике это нужно довольно редко.
jpql использует имена классов, sql имена таблиц и столбцов.
По факту jpql имеет ограничения по группировке и агрегированию по сравнению с sql.
Но у EntityManager есть много удобным методов и часто, если в проекте не spring data,
то используют jpql.
На картинке пример простого селекта.
В этом примере Person - это имя класса-сущности, а p - это псевдоним, который используется в запросе вместо имени класса. Запрос выбирает все объекты класса Person, у которых свойство age больше или равно 18, и возвращает их в списке adults.
Этот запрос может быть выполнен с помощью метода createQuery EntityManager и передачи ему строки JPQL. Затем можно дабавить результаты в List помощью метода getResultList.
Почему инкапсуляция заставляет нас использовать приватные модификаторы доступа у полей?
Если мы поставим паблик у поля, мы потеряем контроль. На картинке пример, на котором колесо с паблик диаметром не может иметь отрицательного значения, но нарушая правила инкапсуляции, мы имеет доступ к этому полю напрямую и можем выставлять туда любые значения, что приводит нас к ошибке
Делайте поля private и если можно то final, и будет все окей!
Если мы поставим паблик у поля, мы потеряем контроль. На картинке пример, на котором колесо с паблик диаметром не может иметь отрицательного значения, но нарушая правила инкапсуляции, мы имеет доступ к этому полю напрямую и можем выставлять туда любые значения, что приводит нас к ошибке
Делайте поля private и если можно то final, и будет все окей!
Что такое полиморфизм?
Я всегда говорю : " Один интерфейс множество реализаций"
На практике это:
- Создаем интерфейс Movable
- Создаем класс Animal и реализовываем интерфейс
- Создаем два класса Cat и Bird и наследуемся от класса Animal, переопределяем в них метод move
- В main создаем обьекты классов Cat и Bird, но ссылку указываем на наш интерфейс. Эту возможность нам предоставляет полиморфизм.
- Далее вызываем полиморфный метод move у интерфейса , который связан через наследование с нашими классами.
Я всегда говорю : " Один интерфейс множество реализаций"
На практике это:
- Создаем интерфейс Movable
- Создаем класс Animal и реализовываем интерфейс
- Создаем два класса Cat и Bird и наследуемся от класса Animal, переопределяем в них метод move
- В main создаем обьекты классов Cat и Bird, но ссылку указываем на наш интерфейс. Эту возможность нам предоставляет полиморфизм.
- Далее вызываем полиморфный метод move у интерфейса , который связан через наследование с нашими классами.
👍2
Records in java
В java 16 добавили records.
Records представляют классы, которые предназначены для создания неизменяемых классов данных.
На картинке создал record BirdOne, автоматически создается поле name (final), конструктор, геттер и переопределены методы equals(), hashCode() и toString().
lombok теперь можно не использовать!
В java 16 добавили records.
Records представляют классы, которые предназначены для создания неизменяемых классов данных.
На картинке создал record BirdOne, автоматически создается поле name (final), конструктор, геттер и переопределены методы equals(), hashCode() и toString().
lombok теперь можно не использовать!
Зачем нужен Optional?
Optional контейнер для того, что бы избежать NullPointerException - это исключение, которое возникает в Java, когда программа пытается выполнить операцию с null ссылкой в качестве объекта.
Заварачиваем List c помощью статического метода ofNullable(), который принимает значение в качестве аргумента и возвращает Optional, содержащий это значение, если оно не равно null, или же пустой Optional, если значение равно null.
Затем мы можем использовать метод isEmpty для проверки, содержит ли Optional null. Если isEmpty() возвращает false, то мы можем вызвать метод get() для получения содержимого Optional.
Короче, если есть риск того, что будет npe, заварачивайте обьект в optional
Optional контейнер для того, что бы избежать NullPointerException - это исключение, которое возникает в Java, когда программа пытается выполнить операцию с null ссылкой в качестве объекта.
Заварачиваем List c помощью статического метода ofNullable(), который принимает значение в качестве аргумента и возвращает Optional, содержащий это значение, если оно не равно null, или же пустой Optional, если значение равно null.
Затем мы можем использовать метод isEmpty для проверки, содержит ли Optional null. Если isEmpty() возвращает false, то мы можем вызвать метод get() для получения содержимого Optional.
Короче, если есть риск того, что будет npe, заварачивайте обьект в optional
Задача с leetcode
Дана строка s, состоящая из слов и пробелов. Вернуть длину последнего слова в строке.
Решение в комментах
Дана строка s, состоящая из слов и пробелов. Вернуть длину последнего слова в строке.
Решение в комментах
Можно ли переопределить статический метод?
Anonymous Quiz
40%
Можно
46%
Нет
13%
Если только сделать перекрытие без @Override
Заполнить пустое место в методе action() так,
чтобы был корректно вызван метод
чтобы был корректно вызван метод
Anonymous Quiz
58%
super
14%
this
8%
One
20%
new One()
https://codeshare.io/WdqD9E
Написал пару тестов, остальные сами пишите, если не выйдет пишите в коменты помогу.
Это совершенно типичное задание для джуна на работе, реализация интерфейса, тесты.
Написал пару тестов, остальные сами пишите, если не выйдет пишите в коменты помогу.
Это совершенно типичное задание для джуна на работе, реализация интерфейса, тесты.
С Новым годом!!! 🎄
Желаю вам в новом году доучить джаву и найти работу.
Всем мир! ✌️
Желаю вам в новом году доучить джаву и найти работу.
Всем мир! ✌️
👍15❤4
Predicate
Интерфейс который предоставляет boolean метод test(). В основном используется для фильтрации данных из потока. Можно еще всякие проверки писать, типа есть соединения с бд, отправляет ли в кафку. Ну и запускать шедулер когда тру.
На картинке написал предикат, который проверяет содержится ли в стринге буква "c". Метод тест возвращает true, если элемент есть.
Задание:
Дан массив стрингов написать цепочку предикатов на поиск элементов содержащих "a", "c".
Решение в комментах
Интерфейс который предоставляет boolean метод test(). В основном используется для фильтрации данных из потока. Можно еще всякие проверки писать, типа есть соединения с бд, отправляет ли в кафку. Ну и запускать шедулер когда тру.
На картинке написал предикат, который проверяет содержится ли в стринге буква "c". Метод тест возвращает true, если элемент есть.
Задание:
Дан массив стрингов написать цепочку предикатов на поиск элементов содержащих "a", "c".
Решение в комментах
👍2
Function
Интерфейс принимает объект одного типа и возвращает другого.
На картинке мы считаем количество символов в стринг.
apply() как раз тот метод куда мы пихаем стринг и ожидаем что он нам выведет Integer, т.к в function мы определили s.length()
Задание:
Посчитать количество символов у массива стрингов, через stream.
Решение в комментах
Интерфейс принимает объект одного типа и возвращает другого.
На картинке мы считаем количество символов в стринг.
apply() как раз тот метод куда мы пихаем стринг и ожидаем что он нам выведет Integer, т.к в function мы определили s.length()
Задание:
Посчитать количество символов у массива стрингов, через stream.
Решение в комментах