Не будем больше беспокоиться о трудноподдерживаемых SQL-запросах в Java-коде, SqlBuilder вам поможет!
/**
* Если вам нужно использовать шаблонизатор для рендеринга,
* здесь вы можете установить глобальный механизм.
* Например, я использую механизм beetl.
*/
SqlBuilder.setEngine(new SqlBeetlEngine());
// Получаем SQL-запрос, test — это имя файла, findSqlOfBeetl — уникальный идентификатор запроса, при повторении будет возвращён первый.
String sql0 = SqlBuilder.render("test.findSqlOfBeetl");
// Этот способ передачи параметров в конструкторе был объявлен устаревшим в версии v1.3.5
String sql1 = SqlBuilder.render("test.findSqlOfBeetl", new SqlBuilderPara("name", "颖"), ...);
// Рекомендуется использовать
String sql2 = SqlBuilder.sql("test.findSqlOfBeetl")
// Если не указан механизм, используется глобальный.
// Указание механизма рендеринга шаблона применяется только к этому запросу, последующие настройки будут перекрывать предыдущие.
// Использование механизма freemarker
.engine(SqlFreemarkerEngine.class)
// Использование механизма beetl
.engine(SqlBeetlEngine.class)
// Установка параметров
.para("name", "颖")
.para(..., ...)
// Рендеринг запроса
.render();
Файл test.md
findSqlOfFreemarker
===
-- Внешние SQL-запросы также могут содержать комментарии
select * from T_TEST AS i <#if order ??>ORDER BY i.date ${order} </#if>
findSqlOfBeetl
===
-- Комментарий 2
select * from T_TEST AS i <%if (!isEmpty(name)) {%>where i.name = '${name}' <%}%>
fromUserId
===
from user where id = ?
findUserName
===
-- Запрос с использованием функции
-- Включение этого файла аналогично обычному вызову test.yourSqlName
select username sql('fromUserId')
Тестовый класс Tester.java
// Устанавливаем глобальный шаблонизатор
SqlBuilder.setEngine(new SqlBeetlEngine());
// Beetl
String sql1 = SqlBuilder.render("test.findSqlOfBeetl", new SqlBuilderPara("name", "颖"));
System.out.println("Рендеринг с помощью Beetl:");
System.out.println(sql1);
// Freemarker
// Настройка отдельного шаблонизатора
String sql2 = SqlBuilder.render(new SqlFreemarkerEngine(), "test.findSqlOfFreemarker", new SqlBuilderPara("order", "DESC"));
System.out.println("Рендеринг с помощью Freemarker:");
System.out.println(sql2);
// Пример использования функции запроса
String sql3 = SqlBuilder.render("test.findUserName");
System.out.println("Функция sql('...') для рендеринга:");
System.out.println(sql3);
Результат вывода
Рендеринг с помощью Beetl:
select * from T_TEST AS i where i.name = '颖'
Рендеринг с помощью Freemarker:
select * from T_TEST AS i ORDER BY i.date DESC
Функция sql('...') для рендеринга:
select * from user where id = ?
v1.3.5
[Новое] Добавлен новый способ построения SqlBuilder.sql('fileName.sqlId').para(key, value).para(key, value).render().
v1.3.4
[Исправлено] Проблема с ошибкой при передаче null значения в SqlBuilderPara.
v1.3.3
[Исправлено] Проблема невозможности toJSONString в классе SqlBuilderModel.
v1.3.2
[Новое] Поддержка быстрого использования класса SqlBuilderModel в jfinal.
[Новое] Конфигурационный файл с параметром sqlDebug=true для режима отладки, выводящий рендеренные запросы и параметры перед и после рендеринга.
v1.3.1
[Оптимизация] Оптимизация кода рендеринга SQL-запросов для базы данных Damao.
V1.3
[Новое] Функция sql('...'), поддерживающая функцию запроса.
[Новое] Промежуточное ПО для повышения расширяемости.
V1.2
[Новое] Логирование с log4j.
[Новое] Поддержка рендеринга запросов для базы данных Damao.
[Оптимизация] Оптимизирован код с использованием Sonarqube для улучшения качества кода.
[Исправление] Исправлены некоторые мелкие ошибки.
[Тестирование] Оптимизация на основе опыта использования в официальном коммерческом проекте.
v1.1
[Оптимизация] Удалена зависимость от пакета инструментов apache-commons-lange3.
v1.0
[Рождение] Первое появление проекта в git.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )