Шаблонизация sql, или история еще одного велосипеда, в...
TRANSCRIPT
![Page 1: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/1.jpg)
Шаблонизация SQLеще один велосипед
Алексей Романчук
![Page 2: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/2.jpg)
Обо мне
![Page 3: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/3.jpg)
О чем будем говорить?
![Page 4: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/4.jpg)
Для кого
• Разработчики
• Много SQL
• Динамический SQL
![Page 5: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/5.jpg)
Для чего стараемся?
• Сложные выборки
• Отчеты
• Любые SQL запросы
![Page 6: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/6.jpg)
Очень простой пример
![Page 7: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/7.jpg)
Очень простой пример
![Page 8: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/8.jpg)
Простой пример
![Page 9: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/9.jpg)
Простой пример
![Page 10: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/10.jpg)
Простой пример
![Page 11: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/11.jpg)
Пример
![Page 12: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/12.jpg)
Пример
![Page 13: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/13.jpg)
Не такой простой пример
![Page 14: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/14.jpg)
Не такой простой пример
![Page 15: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/15.jpg)
Не такой простой пример
![Page 16: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/16.jpg)
Не такой простой пример
![Page 17: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/17.jpg)
Пример почти из жизни
![Page 18: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/18.jpg)
Пример почти из жизни
![Page 19: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/19.jpg)
Почувствуйте разницу
![Page 20: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/20.jpg)
Недостатки inline подхода
![Page 21: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/21.jpg)
Недостатки inline подхода
• Невозможность ограничить текст запроса
• Дублирование логики в запросах и в параметрах
• Часть свойств в тексте запроса, часть как явные параметры
• Сложность разработки и отладки SQL
![Page 22: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/22.jpg)
Как происходит разработка SQL
• Получить SQL из кода
• Заменить «?» на значения
• Внести изменения в SQL редакторе
• Внедрить изменения в код или «оживить» написанный SQL целиком
![Page 23: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/23.jpg)
Что делать?
![Page 24: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/24.jpg)
Шаблонизация FTW
![Page 25: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/25.jpg)
Шаблонизация FTW
![Page 26: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/26.jpg)
Шаблонизация FTW
![Page 27: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/27.jpg)
Стало ли проще?
![Page 28: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/28.jpg)
Стало ли проще?
![Page 29: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/29.jpg)
Что дает шаблонизация?
• Возможность ограничить текст запроса
• Текст первичен
• Многострочные запросы легко копировать
![Page 30: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/30.jpg)
Какой должна быть разработка SQL
• Получить SQL из кода
• Заменить «?» на значения
• Внести изменения в SQL редакторе
• Внедрить изменения в код или «оживить» написанный SQL целиком
![Page 31: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/31.jpg)
Наконец!
![Page 32: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/32.jpg)
Требования к шаблонизатору
• Шаблон должен быть максимально валидным SQL
• Возможность «выключить» ненужный join
• Поддержка типизированных параметров
• Автоматическое включение joinов
![Page 33: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/33.jpg)
Где хранить метаданные чтобы шаблон оставался валидным SQL?
![Page 34: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/34.jpg)
XDoclet
*.hbmJava source
javac .class
![Page 35: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/35.jpg)
И не только
• Javadoc
• Google Closure Compiler for JS
• Eclipse localization (//$NON-NLS-1$)
• UML Doclet
![Page 36: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/36.jpg)
Шаблонизатор
SQL редакторШаблон
Движок Запрос
Parameters
![Page 37: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/37.jpg)
Шаблонизатор в двух словах
• Элемент
• Дерево
![Page 38: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/38.jpg)
Элемент
• Имя
• Тип
• Значение
/*id(int */1045/*)*//*cond(*/inner join orders o…/*)*/
Единственная языковая конструкция
![Page 39: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/39.jpg)
Варианты синтаксиса элемента
• /*{name*/1045/*}*/
• /*<name type=“int”>*/1045/*</name>*/
• /*<name:int*/1045/*>*/
• /*name(int */1045/*)*/
![Page 40: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/40.jpg)
Работа с элементом
• По умолчанию элемент «выключен»
• Явное задание значение и проверка типа
• Использование значения из шаблона
![Page 41: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/41.jpg)
Простой пример
select c.id, c.name
from company c
where c.name ilike ‘2 gis’
![Page 42: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/42.jpg)
Простой пример
select c.id, c.name
from company c
where c.name ilike /*name(*/‘2 gis%’/*)*/
![Page 43: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/43.jpg)
Простой пример
Template t = new Template(“…”);
t.assignValue(“name”, “Sbertech%”);
![Page 44: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/44.jpg)
Простой пример
select c.id, c.name
from company c
where c.name ilike ‘Sbertech%’
![Page 45: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/45.jpg)
Дерево
• Шаблон – дерево текста и элементов (xml)
• По умолчанию элемент «выключен»
• Включение элемента включает элемент родителя
![Page 46: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/46.jpg)
Дерево
/*filter(*/where name = /*name(*/’Jack’/*))*/
• Шаблон
–filter
• name
![Page 47: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/47.jpg)
Пример с join
select distinct c.id, c.name
from company c
inner join comp_office co on co.comp_id = c.id
where c.name ilike '2 gis%’
and co.country ilike ‘russia%’
![Page 48: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/48.jpg)
Пример с join
select distinct c.id, c.name
from company c
inner join comp_office co on co.comp_id = c.id
where c.name ilike /*name(*/'2 gis%’/*)*/
and co.country ilike /*country(*/ ‘russia%’/*)*/
![Page 49: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/49.jpg)
Пример с join
select distinct c.id, c.name
from company c
inner join comp_office co on co.comp_id = c.id
where c.name ilike /*name(*/'2 gis%’/*)*/
/*office(*/and co.country ilike /*country(*/ ‘russia%’/*))*/
![Page 50: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/50.jpg)
Пример с join
select distinct c.id, c.name
from company c
/*office(*/inner join comp_office co on co.comp_id = c.id/*)*/
where c.name ilike /*name(*/'2 gis%’/*)*/
/*office(*/and co.country ilike /*country(*/ ‘russia%’/*))*/
![Page 51: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/51.jpg)
Пример с join
• Шаблон
– office (join)
– name
– office (where)
• country
![Page 52: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/52.jpg)
Пример с join
Template t = new Template(“…”);
t.assignValue(“name”, “Sbertech%”);
![Page 53: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/53.jpg)
Пример с join
select distinct c.id, c.name
from company c
where c.name ilike ‘Sbertech%’
![Page 54: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/54.jpg)
Пример с join
Template t = new Template(“…”);
t.assignValue(“name”, “Sbertech%”);
t.assignValue(“country”, “Rus%”);
![Page 55: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/55.jpg)
Пример с join
select distinct c.id, c.name
from company c
inner join comp_office co on co.comp_id = c.id
where c.name ilike ‘Sbertech%’
and co.country ilike ‘Rus%’
![Page 56: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/56.jpg)
Реальный примерselect distinct c.id, c.name
from company c
inner join comp_office co on co.comp_id = c.id
inner join orders o on o.comp_id = c.id
where c.name ilike '2 gis%'
and co.country ilike 'russia%'
and co.city ilike 'novosibirsk%'
and co.street ilike 'marks%'
and o.date > currenttime - '6 month'::interval
limit 10 offset 5
![Page 57: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/57.jpg)
Реальный примерselect distinct c.id, c.name
from company c
inner join comp_office co on co.comp_id = c.id
inner join orders o on o.comp_id = c.id
where c.name ilike /*name(*/'2 gis%’/*)*/
and co.country ilike /*country(*/'russia%' /*)*/
and co.city ilike /*city(*/'novosibirsk%’/*)*/
and co.street ilike /*street(*/'marks%'/*)*/
and o.date > currenttime - '6 month'::interval
limit /*limit(int*/10/*)*/ offset /*offset(int*/5/*)*/
![Page 58: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/58.jpg)
Реальный примерselect distinct c.id, c.name
from company c
inner join comp_office co on co.comp_id = c.id
inner join orders o on o.comp_id = c.id
where c.name ilike /*name(*/'2 gis%’/*)*/
and co.country ilike /*country(*/'russia%' /*)*/
and co.city ilike /*city(*/'novosibirsk%’/*)*/
and co.street ilike /*street(*/'marks%'/*)*/
/*active(*/and o.date > currenttime - '6 month'::interval/*)*/
limit /*limit(int*/10/*)*/ offset /*offset(int*/5/*)*/
![Page 59: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/59.jpg)
Реальный примерselect distinct c.id, c.name
from company c
inner join comp_office co on co.comp_id = c.id
/*active(*/inner join orders o on o.comp_id = c.id/*)*/
where c.name ilike /*name(*/'2 gis%’/*)*/
and co.country ilike /*country(*/'russia%' /*)*/
and co.city ilike /*city(*/'novosibirsk%’/*)*/
and co.street ilike /*street(*/'marks%'/*)*/
/*active(*/and o.date > currenttime - '6 month'::interval/*)*/
limit /*limit(int*/10/*)*/ offset /*offset(int*/5/*)*/
![Page 60: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/60.jpg)
Реальный примерselect distinct c.id, c.name
from company c
/*office(*/inner join comp_office co on co.comp_id = c.id/*)*/
/*active(*/inner join orders o on o.comp_id = c.id/*)*/
where c.name ilike /*name(*/'2 gis%’/*)*/
/*office(*/and co.country ilike /*country(*/'russia%' /*)*/
and co.city ilike /*city(*/'novosibirsk%’/*)*/
and co.street ilike /*street(*/'marks%'/*))*/
/*active(*/and o.date > currenttime - '6 month'::interval/*)*/
limit /*limit(int*/10/*)*/ offset /*offset(int*/5/*)*/
![Page 61: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/61.jpg)
Реальный пример
• Шаблон– office (join)– active (join)– name– office (where)
• country• city• street
– active (where)– limit и offset
![Page 62: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/62.jpg)
Реальный пример
Template t = new Template(“…”);
t.assignValue(“name”, “2 gis”);
t.assignValue(“country”, “russia”);
t.assignValue(“city”, “novosibirsk”);
t.assignValue(“street”, “marksa”);
t.assignValue(“limit”, 10);
t.assignValue(“offset”, 5);
t.enable(“active”);
![Page 63: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/63.jpg)
Что дает нам велосипед?
• Ограничение текста запроса
• Позволяет контролировать тип параметров
• Позволяет не удалять значения параметров
• Позволяет разрабатывать и использовать в программе один и тот же шаблон
![Page 64: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/64.jpg)
Что дальше?
• POJO как конфигурация запроса
• Как получить PreparedStatement, а не текст?
• “Reflection” API и автотесты
• IDE plugins
![Page 65: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/65.jpg)
Вместо заключения
• Заимствуйте в смежных областях
• Сфокусируйтесь на узкой задаче
• Придумывайте простое решение
• DSL FTW
![Page 66: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/66.jpg)
?
@1eshawww.linkedin.com/in/alexeyromanchuk
![Page 67: Шаблонизация sql, или история еще одного велосипеда, в трех частях, Алексей Романчук (СберБанк Технологии)](https://reader034.vdocuments.pub/reader034/viewer/2022052311/55af00141a28ab0f468b457b/html5/thumbnails/67.jpg)
Реализации
https://github.com/seratch/scalikejdbchttps://github.com/jbzdak/query-builder
http://amateras.sourceforge.jp/site/mirage/welcome.html