IntelliJ IDEA - Java代码中SQL语法的突出显示

Vas*_*hev 13 java sql syntax-highlighting intellij-idea

我使用IntelliJ 13作为一个项目的IDE,通过Spring的JDBC模板与DB进行通信.当我在Java中拥有代码片段时,如下所示:

getJdbcTemplate().queryForObject("SELECT CONVERT(VARCHAR(255), NEWID())", String.class);
Run Code Online (Sandbox Code Playgroud)

其中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;}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)


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

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

对于相同的查询:

queryForString("SELECT CONVERT(VARCHAR(255), NEWID())");
Run Code Online (Sandbox Code Playgroud)

没有语法突出显示SQL语句.你知道如何为不是JdbcTemplate或java.sql接口的方法参数的Java stings启用SQL staments的语法高亮显示吗?

Jav*_*aru 29

您可以通过1)设置2)注释和/或3)注释来完成此操作.对于其中任何一个,您必须IntelliLang启用(捆绑)插件.

设置

您可以添加一个设置来表示特定方法的参数是某种"语言"(例如SQL).

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

现在,当您使用该方法时,IntelliJ IDEA将自动应用语言注入: 在此输入图像描述

注释

您可以将方法参数(或变量或字段)注释为特定语言类型.默认情况下,IntelliJ IDEA将使用IntelliJ IDEA附带的org.intellij.lang.annotations.Language注释annotations.jar.它位于<installDirectory>/redist/annotations.jar或位于maven中心:g:"com.intellij"和a:"annotations"(注意:maven central中的最新jar是来自版本12.它拥有你需要的一切.在v14中添加了一个非相关的注释我今天将罐子从v13和v14上传到maven central(因为我过去一直是这样做的,并且有意更新它们.)但是需要几天的时间来处理整个系统.)

将注释JAR添加到类路径中.然后将方法的参数注释为SQL.请注意,当您键入语言类型时,代码完成将起作用:

public void checkDatabase(String foo, @Language("SQL")String sql, String bar)
Run Code Online (Sandbox Code Playgroud)

我喜欢这个注释,因为即使对于非IntelliJ IDEA用户,它也让他们知道String应该是有效的SQL,XML,CSS或其他什么.您还可以注释变量或字段: 在此输入图像描述

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

评论

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

PS有关详细信息,请参阅帮助主题>帮助>手册>一般准则>使用语言注入(此处在线获取)和帮助>手册>语言和框架 - 特定准则> IntelliLang(可从此处在线获取).

  • 我的上一次评论太早了.您可以使用comments选项'// language = SQL'而不添加任何依赖项. (4认同)