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

preview_player
Показать описание
Spring Boot MVC и Webix: решаем проблему N+1 через EntityGraph, настраиваем логгирование SQL и используем дефолтные методы в интерфейсах Java.

Поддержать проект:

В прошлых видео мы реализовали списки и их редактирование через диалоговые окна. Но при этом остался недоделанный момент: автомобили у на отображаются только по модели и угадать марку текущего автомобиля не очень просто, глядя на него в списке.
Для решения этой проблемы мы используем дефолтную (default) реализацию методов в интерфейсах Java. Дефолтный метод позволяет добавить поведение, не требующее реализации у каждого из потомков, при этом не требующее дополнительного обслуживания и не создающее лишних зависимостей.
Далее мы сталкиваемся с проблемой N+1. Проблема эта выражается в том, что когда мы запрашиваем список сущностей, имеющих связи с другими сущностями, мы порождаем паразитные запросы. На каждый запрос списка основных сущностей мы получаем дополнительно столько запросов, сколько записей было получено в списке основной сущности. Данную проблему мы решаем с помощью известных нам EntityGraph.
Для того, чтобы проверить, что мы исключаем паразитные запросы, нам необходимо выводить SQL запросы в лог приложения. Spring поддерживает 2 переменных, для вывода запросов в лог приложения и для простого форматирования этих самых запросов:

Код из видео:

Документация по Spring Data Entity Graph:

Видео по приложению Сарафан, где используются сложные EntityGraph:

Видео по приложению Сарафан, где настраивается JsonView:

Еще про Сарафан и JsonView:

➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

Рекомендации по теме
Комментарии
Автор

Жду конца сезона чтоб все сразу посмотреть))

andreyguzik
Автор

Лови палец вверх, дружище. =)
Столкнулся с этой проблемой, и сразу вспомнил, что у тебя был про это видос.
Опять выручаешь, цены тебе нет.

EvilCartman
Автор

какой же ти красавчик!!!! спасибо так держать.. лайк и подписка

andriiostashevskyi
Автор

Спасибо за этот плейлист, узнал много нового. Может потому, что не смотрел ещё сарафан)

zbgrviw
Автор

Не устаю вам ставить лайки под видео и как всегда, жду новые видосики. Андрей - жду от вас свежатинки, ведь вся годнота только на этом канале!))) Ну очень хочется что-то новенькое!!!

romanmotovilov
Автор

Cделай пожалуйста про много-параметырный поиск в Spring. Искал вроде советуют сделать по Querydsl. Может есть вариант лучше? Почему нельзя сделать составной кастомный квери и если field not null то канкатинировать его к квери.

Togruls
Автор

Мало, очень мало про N + 1 и абсолютно ничего про работу Entity Graph

ShaddTM
Автор

Спасибо за твои видосы!!! Планируется в данном цикле видео с авторизацией?

drhardyc
Автор

Спасибо большое за видео! У меня вопрос, в случае аннотации @JsonIgnore для метода getRepr() в доменной сущности Model.java не потеряем ли мы функционал из dialogPage.js по обновлению родительской таблицы после изменения принадлежности машины? Если я правильно понял, при окрытии модального окна мы будем обращаться к объектам как к классу Model и getRepr() не отработает и мы получим пустую строку вместо обновления таблицы. Еще раз большое спасибо за ваши уроки)

mihailbogatyurev
Автор

Вопрос по пагинации, мне говорил умный дядька, что стандартная пагинация плохая, типа там используется offset(а это типа плохо), а надо nextPageToken использовать для загрузки страниц. То-есть надо делать свою реализацию пагинации. Еще сказал, что нужно использовать Sequence для стратегии id, а еще индексы создавать в базе данных. Мог бы ты показать как это делать?:) Потому что я вообще не понял как это реализовывается. Было бы круто, если бы ты добавил миграцию(это правда, что без нее нигде не делают таблицы? типа отдавать хибернейту создание таблиц - очень плохо).
А так как обычно - большое спасибо)

KyivanEnjoyer
Автор

Андрей, скажите пожалуйста, как вы относитесь к паттернам проектирования? применяет ли где? какие использовали в своих проектах? И советуете ли задумываться о них и стараться применять их.

ivsergey
Автор

Не сделаешь урок по этой теме?
Все таки проблема не менее распространенная чем сама пагинация.

MegaDjango
Автор

Spring 2.6.0 так и не смог победить n+1 :(

JazZ
Автор

Ох уж эти кодеры, которые не учили математику в школе и транслируют свое невежество в массы. Правильно N + 1, и только так.

gennadyshevchenko