IntelliJ IDEA - Java代码中SQL的语法突出显示通过设置通过注释通过评论

我正在使用IntelliJ 13作为一个项目的IDE,该项目通过Spring的JDBC模板与DB进行通信。当我在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>

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

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 sting 启用 SQL stament 的语法突出显示,这些 sting 不是 JdbcTemplate 或 java.sql 接口的 methond 的参数?


答案 1

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

  1. 设置
  2. 批注
  3. 评论。

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

通过设置

您可以添加一个设置,说明特定方法的参数属于某种“语言”(例如 SQL)。

  1. 打开设置 (++ / ) >编辑器>语言注入CtrlAltS,
  2. 在右侧,单击添加按钮,然后选择Java Parameter
  3. “语言注入设置”对话框中,在“ID”字段中选择(或所需的语言)SQL
    • 您还可以指定特定的 SQL 方言,如 、 等。MySQLOracle
  4. 在“类方法”字段中,输入要标识为采用参数的方法。您可以通过省略号按钮打开类浏览器/搜索窗口SQLenter image description here
    • 您可以从代码或库中选择类
  5. 如果您的方法采用多个参数,则可以在对话框中选择该参数:

enter image description here

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

enter image description here

通过注释

您可以将方法参数(或变量或字段)批注为具有特定语言类型。默认情况下,IntelliJ IDEA 将使用 IntelliJ IDEA 中包含的注释。它位于或位于 maven central, org.jetbrains:annotationsorg.intellij.lang.annotations.Languageannotations.jar<installDirectory>/redist/annotations.jar

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

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

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

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

enter image description here

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

通过评论

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

enter image description here

有关详细信息,请参阅 IntelliJ IDEA 用户指南


答案 2

推荐