Skip to content

Latest commit

 

History

History
25 lines (21 loc) · 2.22 KB

File metadata and controls

25 lines (21 loc) · 2.22 KB

Пробуем DSL для работы с SQL

DSL (Domain-specific language) - Предметно-ориентированный язык. Запрос к базе можно стоить вызовом функций, например

select(person.name).from(person).where(person.id.eq(10)).orderBy(person.lastName.asc())

При этом уменьшается возможность ошибиться (опечатка в имени не возможна - программа не скомпилируется), идет контроль типов...

Рассматриваются

Подготовка к работе

  • Работа с БД требует наличие postgres и выполнить скрипты из init.sql (настройки соединения см. com.zemrow.test.dsl.DBConst.java)
  • затем необходимо выполнить com.zemrow.test.dsl.liquibase.RunLiquibase он создаст таблицы
  • querydsl
    • запустить com.zemrow.test.dsl.querydsl.RunQuerydslGenerateConst будут сгенерированы константы и entity в пакет com.zemrow.test.dsl.querydsl.dao.autogen
    • использование в com.zemrow.test.dsl.querydsl.RunQuerydslTest
  • jooq
    • запустить com.zemrow.test.dsl.jooq.RunJooqGenerateConst будут сгенерированы константы и entity в пакет com.zemrow.test.dsl.jooq.autogen
    • использование в com.zemrow.test.dsl.jooq.RunJooqTest

Основная задумка: база является основой

  • изменения вносятся в схему БД (используя liquibase)
  • после изменения автоматически вносятся в код (SQL константы и DSL классы)
  • программа перестанет компилироваться если где-то в SQL ошибка
  • поверх легко написать генераторы кода для других слоев: DAO, Service, Controller, Servlet