IntelliJ IDEA - синтаксическое выделение кода SQL внутри Java

Я использую IntelliJ 13 как IDE для проекта, где связь с БД осуществляется с помощью шаблона J7BC Spring. Когда у меня есть фрагменты кода в Java, такие как:

getJdbcTemplate().queryForObject("SELECT CONVERT(VARCHAR(255), NEWID())", String.class);

где getJdbcTemplate() возвращает инициализированный объект JdbcTemplate, в IDE есть соответствующая подсветка синтаксиса для оператора SQL (вы можете увидеть его в следующем фрагменте):


.code {font-family: Monospace}
.db-stmt {background: #EDFCED}
.db-keyword {color: #000080; font-weight: bold;}
.db-column {color: #7D0C8D; font-weight: bold;}
.db-number {color: #0000FF;}
.java-class {color: #39008E; font-weight: bold;}
<span class="code">getJdbcTemplate().queryForObject("<span class="db-stmt"><span class="db-keyword">SELECT CONVERT</span>(<span class="db-keyword">VARCHAR</span>(<span class="db-number">255</span>), NEWID())</span>", String.<span class="java-class">class</span>);</span>

Ответ 1

Вы можете сделать это через 1) настройку 2) аннотацию и/или 3) комментарий. Для любого из них вы должны включить плагин IntelliLang.

Настройка

Вы можете добавить параметр, чтобы сказать, что конкретный параметр метода имеет определенный "язык" (например, SQL).

  • Открыть настройку (Ctrl + Alt + S/ ,) > Редактоp > Языковые инжекторы
  • Справа нажмите кнопку "Добавить" и выберите Java Parameter
  • В диалоговом окне "Параметры ввода языка" выберите SQL (или нужный язык) в поле ID
    • Вы также можете указать конкретный диалект SQL, например MySQL, Oracle и т.д.
  • В поле "Методы класса" введите метод, который вы хотите идентифицировать как принимающий параметр SQL. Вы можете открыть окно браузера/поиска класса с помощью кнопки многоточия enter image description here
    • Вы можете выбирать классы из своего кода или из библиотек
  • Если ваш метод принимает несколько параметров, вы можете выбрать параметр в диалоговом окне: enter image description here

Теперь IntelliJ IDEA автоматически применяет языковой инжекцию при использовании этого метода: enter image description here

Аннотации

Вы можете аннотировать параметр метода (или переменную или поле) как определенный тип языка. По умолчанию IntelliJ IDEA будет использовать аннотацию org.intellij.lang.annotations.Language, которая находится в annotations.jar, включенном в IntelliJ IDEA. Он расположен в <installDirectory>/redist/annotations.jar или в центре maven: g: "com.intellij" AND a: "аннотации" (Примечание: последняя банка в центральной части maven из версии 12. У него есть все, что вам нужно. В v14 добавлена ​​не связанная аннотация. Я загружу банки из v13 и v14 в maven сегодня (так как я был тем, кто сделал это в прошлое и имело смысл обновлять их), но для обработки через систему требуется несколько дней.)

Добавьте аннотации JAR к вашему пути к классу. Затем аннотируйте свой параметр параметра как SQL. Обратите внимание: выполнение кода будет выполняться при вводе типа языка:

public void checkDatabase(String foo, @Language("SQL")String sql, String bar)

Мне нравится аннотация, так как даже для пользователей, не входящих в IntelliJ IDEA, это позволяет им знать, что строка должна быть действительной SQL, XML, CSS или что-то еще. Вы также можете аннотировать переменную или поле: enter image description here

При желании вы можете изменить аннотацию для использования в настройке (Ctrl + Alt + S/ ,) > Редактоp > Языковые инжекторы > Дополнительно

Комментарий

В качестве альтернативы аннотации вы можете использовать комментарий. (Я не могу вспомнить, когда это было добавлено, поэтому оно не может быть в v13). Насколько мне известно, языковая инъекция через комментарии работает только для переменных и полей. Он не работает для параметров. Например: enter image description here

PS См. разделы справки Справкa > Руководствa > Общие рекомендации > Использование языковых инъекций (доступно онлайн здесь) и Справкa > Руководствa > Язык и рамки - конкретные рекомендации > IntelliLang (доступный онлайн здесь) для получения дополнительной информации.