我尝试在项目中使用jooq,但出于性能原因,我想缓存查询。在performance consideration section的用户手册中,提到了查询缓存,但没有关于如何实现查询的示例。所以我尝试缓存一个查询(例如SimpleSelectConditionStep),如下所示:
SimpleSelectConditionStep query = getFromPool();
if(query != null) {
factory.attach(query);
query.bind(1,"John");
} else {
// create query
factory.select(PERSON).where(PERSON.NAME.equal("Michael"));
}
// fetch and use query
result = query.fetchOne();
.....
putToPool(query);
我的软件是一个多线程的Web应用程序,但保证两个不同的线程不能同时使用相同的查询(池在再次放入池之前不返回相同的查询)。
我知道工厂不是一个线程安全的对象但是我想知道在代码中使用这样的查询会导致问题吗?
答案 0 :(得分:0)
如果准备语句需要很长时间,您可以使用jOOQ的语句重用功能:
http://www.jooq.org/doc/latest/manual/sql-execution/reusing-statements
如果经常执行相同的查询,这将在查询内部保留一个开放语句。除此之外,我怀疑对于像你的例子中的简单查询,你应该需要一个jOOQ对象的缓存。