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

问题描述 投票:0回答:1

PreparedStatement将在每个调用中创建,因此,由于负载而影响性能。因此,我需要确保PreparedStatement应该在单例类中准备一次并再次重用。如何做到这一点? Anoyone可以为此提供示例代码吗?

cassandra singleton prepared-statement
1个回答
0
投票

最简单的情况可能是这样:

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,这是自动完成的,因此,如果您要启动新项目,则最好使用它,因为它包含更多功能。

© www.soinside.com 2019 - 2024. All rights reserved.