PreparedStatement应该在单例类中准备一次,然后在DAO实现中引用



每次调用都会创建PreparedStatement,因此由于负载而对性能产生影响。 因此,我需要确保 PreparedStatement 应该在单例类中准备一次并再次重复使用。 如何实现这一点?请问anoyone可以为此提供示例代码吗?

在最简单的情况下,它可以是这样的:

public class PrepStatementCache {
private static ConcurrentHashMap<String, PreparedStatement> cache = new ConcurrentHashMap<>();
static PreparedStatement getStatement(Session session, final String query) {
return cache.computeIfAbsent(query,  q -> session.prepare(query));
}
}

但是由于映射在计算过程中可能会被阻塞,因此最好实现如下函数getStatement

static PreparedStatement getStatement(Session session, final String query) {
PreparedStatement preparedStatement = cache.get(query);
if (preparedStatement == null) {
preparedStatement = session.prepare(query);
if (preparedStatement != null) {
PreparedStatement p2 = cache.putIfAbsent(query, preparedStatement);
preparedStatement = p2 == null ? preparedStatement : p2;
}
}
return preparedStatement;
}

但要考虑到,对于 Java 驱动程序 4,这是自动完成的,所以如果你要启动新项目,那么最好使用它,因为它包含更多功能。

最新更新