Обратите внимание: я привожу примеры SQL, потому что они могут быть короткими и простыми для понимания. Как уже отмечалось, не рекомендуется создавать SQL со строками независимо от используемой техники.
Процитируем домашнюю страницу StringTemplate : «StringTemplate — это шаблонизатор Java для генерации исходного кода, веб-страниц, электронных писем или любого другого форматированного текста».
Отлично, но что такое «движок шаблонов»?
Механизм шаблонов (также известный как процессор шаблонов или анализатор шаблонов) — это программный компонент, который предназначен для объединения одного или нескольких шаблонов с моделью данных для создания одного или нескольких документов результатов ( Википедия ). Для нас с вами это означает, что механизм шаблонов — это альтернативный способ создания сложного текста. То, что я чувствую, — это полезность. Прежде чем мы углубимся в это, давайте рассмотрим несколько примеров традиционной конструкции String в Java.
Сначала у нас есть старый надежный оператор «+».
String message = "Hello" + " World";
Пока удобно для небольших конкатенаций. Это становится настоящей болью, когда количество встроенных переменных увеличивается.
String strSQL = "UPDATE customers SET customerName='" + name
+ "', customerAddress='" + address
+ "', customerEmail = '”+ email + "
+ "customerNumber = " + phone
+ " customerPurchase = " + purchase
+ "' WHERE id=" + 12;
String new419 = "Hello "
+ "Dear, " + name + ", \n"
+ "Permit me to inform you of my desire of "
+ "going into business relationship with you. "
+ "I have the believe you are a reputable "
+ "and responsible and trustworthy person \n"
+ "I can do business with from the little"
+ "information so far I gathered about you "
+ "during my search for a partner and by matter "
+ "of trust I must not hesitate to confide "
+ "in you for this simple and sincere business. ";
Далее у нас есть StringBuilder. Обычно рекомендуется использовать StringBuilder из-за его профиля производительности.
StringBuilder sqlBuilder = new StringBuilder(
"UPDATE customers SET customerName='").append(name).append(
"', customerAddress='").append(address).append(
"', customerEmail = '").append(email).append(
"', customerNumber = '").append(phone).append(
"', customerPurchase = '").append(purchase).append(
"' WHERE id=").append(12);
К сожалению, это не делает создание строки значительно проще.
Наконец мы отформатировали текст .
// Explicit argument indices may be used to re-order output.
String.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d");
>> d c b a
// Optional locale as the first argument can be used to get
// locale-specific formatting of numbers. The precision and width can be given
// to round and align the value.
String.format(Locale.FRANCE, "e = %+10.4f", Math.E);
>> e = +2,7183
// The '(' numeric flag may be used to format negative numbers with
// parentheses rather than a minus sign. Group separators are
// automatically inserted.
String.format("Amount gained or lost since last statement: $ %(,.2f",balanceDelta);
>> Amount gained or lost since last statement: $ (6,217.58)
Формат мощный, но масштабируется только до нескольких параметров. Это не потому, что есть какой-то программный предел для класса Format, а больше практичности. Отслеживать сто параметров по их индексу было бы довольно сложно.
Шаблоны, лучший способ.
Шаблон — это просто документ с «заполнителями». Эти «заполнители» являются выражениями, которые сообщают шаблонному движку, куда помещать данные. Все (все в порядке) пробелы и символы перевода строки соблюдаются. Это также имеет приятное преимущество отделения форматирования (представления) от данных. Вот простой однострочный пример:
StringTemplate query = new StringTemplate(
"UPDATE customers SET customerName='$customer$'," +
" customerAddress='$address$' WHERE id=$id$");
query.setAttribute("customer", "Frank");
query.setAttribute("address", "1313 Mocking Bird Lane");
query.setAttribute("id", "4453");
System.out.println(query);
Выход:
UPDATE customers SET customerName='Frank', customerAddress='1313 Mocking Bird Lane' WHERE id=4453
Как видите, «заполнители» ограничены $ … $ (или <…>, если вы того пожелаете). Таким образом, это напоминает подстановку переменных в таких языках, как PHP или bash. Имя внутри разделителей используется для поиска правильного фрагмента данных. Наличие имен важно для поддержания читабельности. Это также позволяет помещать данные в шаблон в любом порядке. Это был пример из одной строки. Когда вы получите многострочный текст, вы, вероятно, захотите использовать файл шаблона . Файл шаблона представляет собой простой текстовый документ, который содержит полностью отформатированную версию желаемого результата. $ … $ атрибуты размещаются в документе, чтобы указать части, которые вы хотите заменить позже StringTemplate.
Пример файла шаблона ( spam-419.st ):
От адреса $ from_addr $
до адреса $ to_addr $
Уважаемые $ to $ ,
позвольте мне сообщить вам о моем желании
вступить в деловые отношения с вами. У меня есть уверенность, что вы — уважаемый, ответственный и заслуживающий доверия человек, с которым я могу иметь дело
из небольшой информации, которую я собрал о вас во время поиска партнера,
и, исходя из соображений доверия, я не стесняюсь довериться вам в этом простом и искренний бизнес
.
… Снаилучшими пожеланиями,
$ от $
Заполнение этого шаблона включает в себя загрузку StringTemplateGroup и использование этого для создания экземпляра вашего StringTemplate.
StringTemplateGroup templateGroup = new StringTemplateGroup("spam group", "templates");
StringTemplate spam419 = templateGroup.getInstanceOf("spam419");
spam419.setAttribute("to", "Collin");
spam419.setAttribute("to_addr", "[email protected]");
spam419.setAttribute("from", "Ima Spammer");
spam419.setAttribute("from_addr", "[email protected]");
System.out.println(spam419.toString());
Конструктор StringTemplateGroup в приведенном выше коде принимает два параметра. Первое — это «название группы». В этом примере это не очень важно, не стесняйтесь использовать все, что вам нравится. Второе очень важно. Здесь находится каталог (папка), в котором находятся файлы шаблонов, которые вы хотите загрузить. В этом примере я использую относительный путь. Относительно того, где я выполняю этот код, я ожидаю увидеть каталог под названием « шаблоны ». Метод getInstanceOf () принимает имя (без расширения .st ) того файла шаблона, который должен быть загружен. В этом случае я пытаюсь загрузить » spam419.st «.
С адреса [email protected]
По адресу [email protected]
Уважаемый Коллин!
Позвольте мне сообщить вам о моем желании
вступить в деловые отношения с вами. Я верю, что вы — уважаемый, ответственный и заслуживающий доверия человек, с которым я могу вести дела,
основываясь на небольшой информации, которую я собрал о вас во время поиска партнера,
и, говоря о доверии, я без колебаний доверяю вам в этом простом деле. и искренний бизнес
.
… Снаилучшими пожеланиями,
Ima Spammer
Я рекомендую вам поэкспериментировать с этим шаблоном. Я думаю, вы найдете добавление или удаление строк тривиально. Изменение пробела в шаблоне тривиально. Даже добавление новых атрибутов (заполнителей) просто. StringTemplate — это мощный инструмент, который я не могу описать в одном посте. Для тех, кто хочет поболтать, чтобы узнать больше, я бы рекомендовал прочитать официальную документацию StringTemplate, которая является фантастическим ресурсом.
Веселись,
Коллин