Java JOOQ with Prepared Statements



我使用JOOQ与Microsoft SQL Server 2019。在这个引用中,

https://www.jooq.org/doc/3.0/manual/sql-execution/performance-considerations/

渲染SQL字符串需要一些时间。在内部,jOOQ重用相同的java.lang.StringBuilder用于完整的查询,但有些渲染元素可能需要一些时间。当然,你可以缓存由jOOQ生成的SQL,并准备自己的java.sql.PreparedStatement对象

我正在阅读Java准备好的语句准备好的SQL这一行对我来说没有意义,You could, of course, cache SQL generated by jOOQ and prepare your own java.sql.PreparedStatement objects。难道使用PreparedStatement不只是增加了另一种语言,降低了JOOQ作为类型/字符串安全的整个目的吗?JOOQ如何与Prepared语句一起使用?这有代码解释吗?尝试使用此策略编写代码。

String sql = "select * from people where id=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setLong(123);

jooq在性能上是否优于java中的简单sql

正如链接文档页面("明智地优化")和我之前的回答中提到的,您可能不应该担心这些事情-当然不是先验的。

要回答您的问题,您可以从任何jOOQ查询中提取SQL字符串并绑定值,如下所示:

String sql = query.getSQL();
List<Object> binds = query.getBindValues();

然后做任何你喜欢的事情,包括缓存值和准备你自己的语句,而不是直接用jOOQ执行查询。

但是,正如链接页面中所声明的那样,您不应该预先担心任何此类开销。例如,当对内存中几乎没有数据的H2数据库运行成千上万个相同的琐碎查询时,SQL字符串生成的开销是可测量的,但当通过网络对具有真实工作负载的远程SQL Server运行普通查询时,则不是这样。

而且,使用这种方法,你放弃了jOOQ在执行查询时提供的许多很好的特性(例如新的MULTISET操作符)

最新更新