IntelliJ IDEA - SQL 内部 Java 代码的语法高亮显示

IntelliJ IDEA - Syntax Highlighting of SQL Inside Java Code

我将 IntelliJ 13 用作 IDE 项目,其中与数据库的通信是通过 Spring 的 JDBC 模板完成的。当我在 Java 中有如下代码片段时:

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

其中 getJdbcTemplate() returns 初始化了 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>


但是,当我使用我创建的另一种方法时:

protected String queryForString(String sql, Object... args) {
    try {
        return getJdbcTemplate().queryForObject(sql, String.class, args);
    }
    catch (RuntimeException e) {
        return null;
    }
}

对于相同的查询:

queryForString("SELECT CONVERT(VARCHAR(255), NEWID())");

SQL 语句没有语法突出显示。 您知道如何为 Java 字符串启用 SQL 语句的语法高亮显示吗?

您可以通过以下任意组合来执行此操作:

  1. 一个设置
  2. 注释
  3. 一条评论。

对于其中任何一个,您必须启用(捆绑的)IntelliLang 插件。

通过设置

您可以添加一个设置来表示特定方法的参数是某个'language'(例如SQL。)

  1. 打开设置 (Ctrl+Alt+S / ,) > 编辑器 > 语言注入
  2. 点击右边的添加按钮,然后select Java Parameter
  3. 语言注入设置对话框中,ID字段中的selectSQL(或所需的语言)
    • 您还可以指定特定的 SQL 方言,例如 MySQLOracle
  4. 在“Class 方法”字段中,输入要识别为采用 SQL 参数的方法。您可以通过省略号按钮 打开 class browser/search window
    • 您可以 select class 来自您的代码或库
  5. 如果你的方法有多个参数,你可以select对话框中的参数:

现在,当您使用该方法时,IntelliJ IDEA 将自动应用语言注入:

通过注解

您可以将方法参数(或变量或字段)注释为特定语言类型。默认情况下,IntelliJ IDEA 将使用 IntelliJ IDEA 附带的 annotations.jar 中的 org.intellij.lang.annotations.Language 注释。它位于 <installDirectory>/redist/annotations.jar 或 Maven 中心,org.jetbrains:annotations

注意:还有一些非官方上传的带有不同组 ID 的注释 jar,包括(但不限于)“com.intellij”。这是因为多年前,JetBrains 并没有将它们上传到 Maven Central。所以一些社区成员这样做了,但是在不同的组 ID 下。在过去几年中,JetBrains 一直在使用(官方)组 ID“org.jetbrains”上传它们。这是其他工件在其 POM(例如 Kotlin POM)中使用的,因此应该使用。

将注释 JAR 添加到您的 class 路径。 (在大多数情况下,JAR 只需要在 class 路径上进行开发,而在运行时不需要。因此您可以使用“提供”的 maven <scope>。)然后注释您的方法参数为 SQL。请注意,当您键入语言类型时,代码完成将起作用:

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

我喜欢注释,因为即使对于非 IntelliJ IDEA 用户,它也让他们知道字符串应该是有效的 SQL、XML、CSS 或其他。您还可以注释变量或字段:

如果需要,您可以更改注释以在 设置中使用 (Ctrl+Alt+S / ,) > 编辑器 > 语言注入 > 高级

通过评论

作为注释的替代方法,您可以使用注释。 (我不记得这是什么时候添加的。所以它可能不在 v13 中)。不过据我所知,通过注释进行的语言注入仅适用于变量和字段。它不适用于参数。例如:

有关详细信息,请参阅 IntelliJ IDEA user guide