【问题标题】:IntelliJ IDEA - Syntax Highlighting of SQL Inside Java CodeIntelliJ IDEA - SQL Inside Java 代码的语法高亮
【发布时间】:2015-06-10 10:19:41
【问题描述】:

我正在使用 IntelliJ 13 作为一个项目的 IDE,其中与 DB 的通信是通过 Spring 的 JDBC 模板完成的。当我在 Java 中有如下代码片段时:

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

其中 getJdbcTemplate() 返回初始化的 JdbcTemplate 对象,IDE 对 SQL 语句有适当的语法突出显示(您可以在下面的 sn-p 中看到它):


.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 语句没有语法高亮显示。 你知道如何为不是 JdbcTemplate 或 java.sql 接口的方法参数的 Java 字符串启用 SQL 语句的语法突出显示吗?

【问题讨论】:

  • 您可以尝试选择部分 SQL 查询,按 Alt ENTER 并选择注入语言参考/SQL。不确定它对于给定方法的参数是临时的还是永久的......
  • 好的,我不知道这种可能性。现在对我有用,但我希望有一个永久的解决方案(比如一些设置或注释......)

标签: java sql intellij-idea syntax-highlighting


【解决方案1】:

您可以通过以下任意组合来做到这一点:

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

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

通过设置

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

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

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

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

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

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

通过评论

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

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

【讨论】:

  • 这很好。有没有在开发过程中只将它添加到类路径的好方法。
  • 我的最后评论太早了。您可以使用 cmets 选项 '//language=SQL' 而不添加任何依赖项。
猜你喜欢
  • 2014-02-14
  • 2019-05-12
  • 2017-09-14
  • 2013-05-13
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 2020-11-08
  • 2019-06-13
相关资源
最近更新 更多