N+1 и дефолтные методы. Spring Boot + Webix
Spring Boot MVC и Webix: решаем проблему N+1 через EntityGraph, настраиваем логгирование SQL и используем дефолтные методы в интерфейсах Java. Поддержать проект: ➡ Стать спонсором https://www.youtube.com/letscodedru/join ➡ Patreon https://www.patreon.com/letscodedru ➡ Яндекс.Деньги https://money.yandex.ru/to/41001451675086 ➡ PayPal https://paypal.me/letscodedru ➡ Qiwi https://qiwi.me/letscode В прошлых видео мы реализовали списки и их редактирование через диалоговые окна. Но при этом остался недоделанный момент: автомобили у на отображаются только по модели и угадать марку текущего автомобиля не очень просто, глядя на него в списке. Для решения этой проблемы мы используем дефолтную (default) реализацию методов в интерфейсах Java. Дефолтный метод позволяет добавить поведение, не требующее реализации у каждого из потомков, при этом не требующее дополнительного обслуживания и не создающее лишних зависимостей. Далее мы сталкиваемся с проблемой N+1. Проблема эта выражается в том, что когда мы запрашиваем список сущностей, имеющих связи с другими сущностями, мы порождаем паразитные запросы. На каждый запрос списка основных сущностей мы получаем дополнительно столько запросов, сколько записей было получено в списке основной сущности. Данную проблему мы решаем с помощью известных нам EntityGraph. Для того, чтобы проверить, что мы исключаем паразитные запросы, нам необходимо выводить SQL запросы в лог приложения. Spring поддерживает 2 переменных, для вывода запросов в лог приложения и для простого форматирования этих самых запросов: spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true Код из видео: https://github.com/drucoder/logistic/tree/EntityGraph Документация по Spring Data Entity Graph: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-hints Видео по приложению Сарафан, где используются сложные EntityGraph: https://www.youtube.com/watch?v=b2a4rVR5hiQ Видео по приложению Сарафан, где настраивается JsonView: https://www.youtube.com/watch?v=mGfiV9WDd6Y Еще про Сарафан и JsonView: https://youtu.be/pJTO0sLki_c ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ➡ Второй канал: https://www.youtube.com/geekChatDru ➡ Twitch: https://www.twitch.tv/drucoder ➡ Твиттер: https://twitter.com/letsCodeDru ➡ Группа Вконтакте: https://vk.com/letscodedru ➡ Канал в Telegram: https://t.me/letsCode_dru ➡ Чат в Telegram: https://t.me/joinchat/FeiP9xEhqHajfqhLr4z-Nw ➡ Сервер в Discord: https://discord.gg/xs6XxSx ➡ Яндекс.Дзен: https://zen.yandex.ru/media/id/5ac20956168a91ffeae449c5
Spring Boot MVC и Webix: решаем проблему N+1 через EntityGraph, настраиваем логгирование SQL и используем дефолтные методы в интерфейсах Java. Поддержать проект: ➡ Стать спонсором https://www.youtube.com/letscodedru/join ➡ Patreon https://www.patreon.com/letscodedru ➡ Яндекс.Деньги https://money.yandex.ru/to/41001451675086 ➡ PayPal https://paypal.me/letscodedru ➡ Qiwi https://qiwi.me/letscode В прошлых видео мы реализовали списки и их редактирование через диалоговые окна. Но при этом остался недоделанный момент: автомобили у на отображаются только по модели и угадать марку текущего автомобиля не очень просто, глядя на него в списке. Для решения этой проблемы мы используем дефолтную (default) реализацию методов в интерфейсах Java. Дефолтный метод позволяет добавить поведение, не требующее реализации у каждого из потомков, при этом не требующее дополнительного обслуживания и не создающее лишних зависимостей. Далее мы сталкиваемся с проблемой N+1. Проблема эта выражается в том, что когда мы запрашиваем список сущностей, имеющих связи с другими сущностями, мы порождаем паразитные запросы. На каждый запрос списка основных сущностей мы получаем дополнительно столько запросов, сколько записей было получено в списке основной сущности. Данную проблему мы решаем с помощью известных нам EntityGraph. Для того, чтобы проверить, что мы исключаем паразитные запросы, нам необходимо выводить SQL запросы в лог приложения. Spring поддерживает 2 переменных, для вывода запросов в лог приложения и для простого форматирования этих самых запросов: spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true Код из видео: https://github.com/drucoder/logistic/tree/EntityGraph Документация по Spring Data Entity Graph: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-hints Видео по приложению Сарафан, где используются сложные EntityGraph: https://www.youtube.com/watch?v=b2a4rVR5hiQ Видео по приложению Сарафан, где настраивается JsonView: https://www.youtube.com/watch?v=mGfiV9WDd6Y Еще про Сарафан и JsonView: https://youtu.be/pJTO0sLki_c ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ ➡ Второй канал: https://www.youtube.com/geekChatDru ➡ Twitch: https://www.twitch.tv/drucoder ➡ Твиттер: https://twitter.com/letsCodeDru ➡ Группа Вконтакте: https://vk.com/letscodedru ➡ Канал в Telegram: https://t.me/letsCode_dru ➡ Чат в Telegram: https://t.me/joinchat/FeiP9xEhqHajfqhLr4z-Nw ➡ Сервер в Discord: https://discord.gg/xs6XxSx ➡ Яндекс.Дзен: https://zen.yandex.ru/media/id/5ac20956168a91ffeae449c5
