有人可以指出一些关于可用于 Java 的不同 Query DSL 库之间性能比较的资源,例如:Querydsl、jOOQ、JEQUEL、activejdbc、iciql等...
背景:我正在使用 Spring JDBC 模板,但这仍然需要以纯字符串格式编写查询。虽然我在编写直接查询时没有问题,但我担心直接依赖于数据库表名。我不想使用任何 ORM 框架,如 Hibernate 或 JPA/EclipseLink。我需要尽可能高的原始性能(IMO,它们适用于更多以 CRUD 为中心的应用程序)。我可以为这些 DSL 提供一点点开销(我相信,它主要是 StringBuilder/String 连接!)
我考虑过在某些 xml 中使用外部化的命名查询。但只是试图评估不同 Query DSL 库提供的价值。
编辑:更多关于我的要求: 我想知道在使用他们的 API 方法构建一个中等复杂的查询时它们之间的性能比较。我只需要使用这些查询 DSL 库中的任何一个生成查询字符串,并将其传递给 Spring JDBC 模板。所以,我想知道添加这个中间步骤是否会导致相当大的性能损失,我想使用命名查询或构建我自己的库,它只使用 StingBuilder 或类似方法
更新我对 jOOQ、iciql、QueryDSL 的体验:
尽管我在原来的帖子中没有提到这一点,但我也热衷于易用性和我需要在我的实体类中拥有的开销(比如是否需要任何额外的注释或实现)。
约克:
- 需要将实体属性更改为库特定的方式
- 可以返回 SQL 查询字符串
爱奇艺:
- 实体可以在没有或很少更改的情况下进行映射(可以使用总共 3 种方式进行映射)
- 但它仅限于选择查询(对于更新/删除/...需要再次更改实体)
查询DSL:
- 将实体与表绑定的多种方法(除了库特定的方法,支持使用 JPA 注释)。但我们至少需要修改实体
- 没有简单/直接的方法来获取查询字符串
(所有观察结果我对这些知之甚少;如果其中任何一个不正确,请更正)
综上所述,我坚持编写命名查询:(但正如 Lukas Eder 的回答似乎解释了我最初关注的帖子(性能),我接受了他的。