java - IntelliJ IDEA - SQL Inside Java 代码的语法高亮

标签 java sql intellij-idea syntax-highlighting

我正在使用 IntelliJ 13 作为一个项目的 IDE,其中与 DB 的通信是通过 Spring 的 JDBC 模板完成的。当我在 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语句没有语法高亮。 您知道如何为不是 JdbcTemplate 或 java.sql 接口(interface)方法参数的 Java 字符串启用 SQL 语句的语法高亮显示吗?

最佳答案

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

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

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

通过设置

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

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

enter image description here

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

enter image description here

通过注解

您可以将方法参数(或变量或字段)注释为特定语言类型。默认情况下,IntelliJ IDEA 将使用 org.intellij.lang.annotations.Language annotations.jar 中的注释包含在 IntelliJ IDEA 中。它位于 <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 或其他任何东西。您还可以注释变量或字段:

enter image description here

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

通过评论

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

enter image description here

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

关于java - IntelliJ IDEA - SQL Inside Java 代码的语法高亮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30753512/

相关文章:

java - Android任务生命周期和静态数据,任务是否曾经被销毁过?

python - 有效地计算存储在数据库中的树中的叶子

java - IntelliJ 快捷键 ctr +/在第一列而不是当前列添加注释

java - Apache 卡夫卡 VirtualBox : Streaming data from VM to Host PC resulting in error connecting to node

java - 如何在java中创建utf-8编码的文件,以便在 Notepad++ /记事本或任何其他文本编辑器中打开时显示为UTF-8编码

java - 将 Document 设置为 java 类中的全局属性,不起作用

sql - 每个都需要 ORDER BY 子句的子查询的 Sql 联合

sql - 使用sql server将单行多列合并为一列

Java(IntelliJ Idea)-导入类失败

intellij-idea - IntelliJ 方法列表