小编典典

EclipseLink / JPA:如何以编程方式获取已执行的SQL查询的数量

sql

我正在通过EclipseLink使用JPA。在单元测试中,我想测试在一次操作中执行了多少个SQL查询。这样,如果以后的修改导致查询数量激增(例如,如果触发了延迟加载),则单元测试会将其标记为可能需要优化。

我在寻找正确的API来做到这一点。纯JPA解决方案将是理想的选择,但是我可以在单元测试中使用EclipseLink特定的API。我看了看EclipseLink分析器,但是它似乎没有给我一种计算SQL查询数量的方法。

在此先感谢您的帮助!


阅读 176

收藏
2021-04-22

共1个答案

小编典典

我没有找到用于这种验证的合适工具,而是创建了自己的工具。它被称为sniffy,可在MIT许可下使用。

您可以声明生成的查询数,如下所示:

// Integrate Sniffy to your test using @Rule annotation and a QueryCounter field
@Rule
public final QueryCounter queryCounter = new QueryCounter();

// Now just add @Expectation or @Expectations annotations to define number of queries allowed for given method
@Test
@Expectation(1)
public void testJUnitIntegration() throws SQLException {
    // Just add sniffer: in front of your JDBC connection URL in order to enable sniffer
    final Connection connection = DriverManager.getConnection("sniffer:jdbc:h2:mem:", "sa", "sa");
    // Do not make any changes in your code - just add the @Rule QueryCounter and put annotations on your test method
    connection.createStatement().execute("SELECT 1 FROM DUAL");
}

有关与JUnit集成的更多信息,请参见项目Wiki。

2021-04-22