В простейшем случае это может выглядеть так:
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 это делается автоматически, поэтому, если вы запускаете новый проект, лучше использовать его, так как он содержит больше функций.