No video

N+1 и дефолтные методы. Spring Boot + Webix

  Рет қаралды 13,122

letsCode

letsCode

Күн бұрын

Spring Boot MVC и Webix: решаем проблему N+1 через EntityGraph, настраиваем логгирование SQL и используем дефолтные методы в интерфейсах Java.
Поддержать проект:
➡ Стать спонсором www.youtube.co...
➡ Patreon / letscodedru
➡ Яндекс.Деньги money.yandex.r...
➡ PayPal paypal.me/lets...
➡ Qiwi qiwi.me/letscode
В прошлых видео мы реализовали списки и их редактирование через диалоговые окна. Но при этом остался недоделанный момент: автомобили у на отображаются только по модели и угадать марку текущего автомобиля не очень просто, глядя на него в списке.
Для решения этой проблемы мы используем дефолтную (default) реализацию методов в интерфейсах Java. Дефолтный метод позволяет добавить поведение, не требующее реализации у каждого из потомков, при этом не требующее дополнительного обслуживания и не создающее лишних зависимостей.
Далее мы сталкиваемся с проблемой N+1. Проблема эта выражается в том, что когда мы запрашиваем список сущностей, имеющих связи с другими сущностями, мы порождаем паразитные запросы. На каждый запрос списка основных сущностей мы получаем дополнительно столько запросов, сколько записей было получено в списке основной сущности. Данную проблему мы решаем с помощью известных нам EntityGraph.
Для того, чтобы проверить, что мы исключаем паразитные запросы, нам необходимо выводить SQL запросы в лог приложения. Spring поддерживает 2 переменных, для вывода запросов в лог приложения и для простого форматирования этих самых запросов:
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
Код из видео:
github.com/dru...
Документация по Spring Data Entity Graph:
docs.spring.io...
Видео по приложению Сарафан, где используются сложные EntityGraph:
• Комментарии с JPA Enti...
Видео по приложению Сарафан, где настраивается JsonView:
• Подключаем базу данных...
Еще про Сарафан и JsonView:
• Сериализуем с JsonView...
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
➡ Второй канал: / geekchatdru
➡ Twitch: / drucoder
➡ Твиттер: / letscodedru
➡ Группа Вконтакте: letscod...
➡ Канал в Telegram: t.me/letsCode_dru
➡ Чат в Telegram: t.me/joinchat/...
➡ Сервер в Discord: / discord
➡ Яндекс.Дзен: zen.yandex.ru/...

Пікірлер: 29
@andreyguzik2675
@andreyguzik2675 4 жыл бұрын
Жду конца сезона чтоб все сразу посмотреть))
@user-mv8bo2er8v
@user-mv8bo2er8v 4 жыл бұрын
С возвращением в строй!
@EvilCartman
@EvilCartman 3 жыл бұрын
Лови палец вверх, дружище. =) Столкнулся с этой проблемой, и сразу вспомнил, что у тебя был про это видос. Опять выручаешь, цены тебе нет.
@andriiostashevskyi3465
@andriiostashevskyi3465 4 жыл бұрын
какой же ти красавчик!!!! спасибо так держать.. лайк и подписка
@user-zb3gr6vi8w
@user-zb3gr6vi8w 3 жыл бұрын
Спасибо за этот плейлист, узнал много нового. Может потому, что не смотрел ещё сарафан)
@kurmasasha
@kurmasasha 4 жыл бұрын
Это шикарно
@renniqs1084
@renniqs1084 4 жыл бұрын
N+1, круто!!
@dmitrysomsin2117
@dmitrysomsin2117 4 жыл бұрын
Спасибо за урок! Жду продолжения.
@romanmotovilov129
@romanmotovilov129 2 жыл бұрын
Не устаю вам ставить лайки под видео и как всегда, жду новые видосики. Андрей - жду от вас свежатинки, ведь вся годнота только на этом канале!))) Ну очень хочется что-то новенькое!!!
@ShaddTM00
@ShaddTM00 2 жыл бұрын
Мало, очень мало про N + 1 и абсолютно ничего про работу Entity Graph
@turumpurum9374
@turumpurum9374 4 жыл бұрын
Эх, когда же продолжение? Заждалась(
@letsCodeDru
@letsCodeDru 4 жыл бұрын
Скоро
@drhardyc
@drhardyc 4 жыл бұрын
Спасибо за твои видосы!!! Планируется в данном цикле видео с авторизацией?
@letsCodeDru
@letsCodeDru 4 жыл бұрын
Да, планируется. Спасибо за поддержку канала :) очень уважаю твои усы спонсора))
@drhardyc
@drhardyc 4 жыл бұрын
@@letsCodeDru надеюсь в будущем у меня будет возможность поддержать твой проект ещё больше. Успехов и положительных эмоций тебе в твое деле!
@letsCodeDru
@letsCodeDru 4 жыл бұрын
Пасиб)
@mihailbogatyurev8664
@mihailbogatyurev8664 4 жыл бұрын
Спасибо большое за видео! У меня вопрос, в случае аннотации @JsonIgnore для метода getRepr() в доменной сущности Model.java не потеряем ли мы функционал из dialogPage.js по обновлению родительской таблицы после изменения принадлежности машины? Если я правильно понял, при окрытии модального окна мы будем обращаться к объектам как к классу Model и getRepr() не отработает и мы получим пустую строку вместо обновления таблицы. Еще раз большое спасибо за ваши уроки)
@user-zb3gr6vi8w
@user-zb3gr6vi8w 3 жыл бұрын
так и есть)
@Togruls
@Togruls 4 жыл бұрын
Cделай пожалуйста про много-параметырный поиск в Spring. Искал вроде советуют сделать по Querydsl. Может есть вариант лучше? Почему нельзя сделать составной кастомный квери и если field not null то канкатинировать его к квери.
@KyivanEnjoyer
@KyivanEnjoyer 4 жыл бұрын
Вопрос по пагинации, мне говорил умный дядька, что стандартная пагинация плохая, типа там используется offset(а это типа плохо), а надо nextPageToken использовать для загрузки страниц. То-есть надо делать свою реализацию пагинации. Еще сказал, что нужно использовать Sequence для стратегии id, а еще индексы создавать в базе данных. Мог бы ты показать как это делать?:) Потому что я вообще не понял как это реализовывается. Было бы круто, если бы ты добавил миграцию(это правда, что без нее нигде не делают таблицы? типа отдавать хибернейту создание таблиц - очень плохо). А так как обычно - большое спасибо)
@letsCodeDru
@letsCodeDru 4 жыл бұрын
В целом дядька все верно сказал. Но тут мы просто вкатываемся в тему. Этот плейлист и так не особо смотрят, а если я ещё и жестить начну, то вообще полтора человека будут смотреть
@KyivanEnjoyer
@KyivanEnjoyer 4 жыл бұрын
@@letsCodeDru а вдруг не смотрят, потому что видят, что какие-то нонейм технологии, а не условно Spring Boot 2 + Postgres + ReactJS + Redux и прям жестить на уровне продакшена с архитектурой и прочим прочим:) Я уверен этот курс бы взлетел просто в топы ютуба по программированию, так как все курсы по спрингу на всяких онлайн курсах это сраное гавно, которое даже на 10% не похоже на реальность как по функционалу, так и по чистоте кода. Я вот пересматриваю сарафан(хоть там и Vue, который я не хочу учить, так как учу React иногда), а вот этот я даже не знаю нужно ли мне вникать, когда и так много технологий в моем списке изучаемых:)
@ivsergey5150
@ivsergey5150 4 жыл бұрын
Андрей, скажите пожалуйста, как вы относитесь к паттернам проектирования? применяет ли где? какие использовали в своих проектах? И советуете ли задумываться о них и стараться применять их.
@letsCodeDru
@letsCodeDru 4 жыл бұрын
Надо знать их как термины и уметь их видеть. А натягивать на код их не нужно. Паттерны - это словарь, не больше
@gennadyshevchenko7940
@gennadyshevchenko7940 Жыл бұрын
вы еще про алгоритмы его спросите)))
@gennadyshevchenko7940
@gennadyshevchenko7940 Жыл бұрын
@@letsCodeDru еще можно отвечать "Я их не знаю, но интуитивно применяю".
@gennadyshevchenko7940
@gennadyshevchenko7940 Жыл бұрын
Ох уж эти кодеры, которые не учили математику в школе и транслируют свое невежество в массы. Правильно N + 1, и только так.
@JazZ6386
@JazZ6386 2 жыл бұрын
Spring 2.6.0 так и не смог победить n+1 :(
@MegaDjango13
@MegaDjango13 4 жыл бұрын
А как на счет варнинга от пагинации firstResult/maxResults specified with collection fetch; applying in memory! Если это не решить то на проде могут быть проблемы. vladmihalcea.com/fix-hibernate-hhh000104-entity-fetch-pagination-warning-message/ Не сделаешь урок по этой теме? Все таки проблема не менее распространенная чем сама пагинация.
Webix: просто и быстро. Spring Boot + Webix
25:50
Little brothers couldn't stay calm when they noticed a bin lorry #shorts
00:32
Fabiosa Best Lifehacks
Рет қаралды 18 МЛН
SPILLED CHOCKY MILK PRANK ON BROTHER 😂 #shorts
00:12
Savage Vlogs
Рет қаралды 45 МЛН
WORLD'S SHORTEST WOMAN
00:58
Stokes Twins
Рет қаралды 185 МЛН
Андрей Беляев - JPA-паззлеры (+Hibernate и Spring)
1:04:57
JPoint, Joker и JUG ru
Рет қаралды 22 М.
Hibernate. Подводные камни и как их избежать
23:06
Михаил Киселев
Рет қаралды 2,8 М.
Optimization - N+1 Problem Solutions - Entity Graph
19:05
Miss Xing
Рет қаралды 9 М.
WebFlux. Реактивный web с Spring Java
22:41
letsCode
Рет қаралды 60 М.
Что такое JDBC? Что такое ORM, Hibernate & JPA?
12:59
Sergey Nemchinskiy
Рет қаралды 73 М.
Little brothers couldn't stay calm when they noticed a bin lorry #shorts
00:32
Fabiosa Best Lifehacks
Рет қаралды 18 МЛН