我正在使用 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 语句的语法高亮显示吗?
最佳答案
您可以通过以下任意组合来做到这一点:
- 设置
- 注释
- 评论。
对于其中任何一个,您必须拥有(捆绑)IntelliLang
插件已启用。
通过设置
您可以添加一个设置来说明特定方法的参数是某种“语言”(例如 SQL)。
- 打开设置(Ctrl+Alt+S/⌘,) > 编辑器 > 语言注入(inject)
- 在右侧,单击添加按钮并选择
Java Parameter
- 在语言注入(inject)设置对话框中,选择
SQL
(或所需的语言)在 ID 字段中- 您还可以指定特定的 SQL 方言,例如
MySQL
,Oracle
等
- 您还可以指定特定的 SQL 方言,例如
- 在“类方法”字段中,输入您要标识为采用
SQL
的方法范围。您可以通过省略号按钮打开类浏览器/搜索窗口- 您可以从您的代码或库中选择类
- 如果您的方法需要多个参数,您可以在对话框中选择参数:
现在,当您使用该方法时,IntelliJ IDEA 将自动应用语言注入(inject):
通过注解
您可以将方法参数(或变量或字段)注释为特定语言类型。默认情况下,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 或其他任何东西。您还可以注释变量或字段:
如果需要,您可以更改要在设置中使用的注释 (Ctrl+Alt+S/⌘ ,) > 编辑器 > 语言注入(inject) > 高级
通过评论
作为注释的替代方法,您可以使用注释。 (我不记得这是什么时候添加的。所以它可能不在 v13 中)。不过据我所知,通过注释进行的语言注入(inject)仅适用于变量和字段。它不适用于参数。例如:
有关详细信息,请参阅 IntelliJ IDEA user guide
关于java - IntelliJ IDEA - SQL Inside Java 代码的语法高亮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30753512/