9.11.准备好的报表
可以将多次执行的 CQL 语句准备好并存储在一个PreparedStatement对象中,以提高查询性能。驱动程序和 Cassandra 都维护着PreparedStatement查询到其元数据的映射。您可以通过以下抽象使用准备好的语句:
- CqlTemplate 通过API的选择
- CassandraTemplate 通过启用准备好的语句
- Cassandra 存储库,因为它们建立在 CassandraTemplate
9.11.1.使用CqlTemplate
的CqlTemplate类(及其异步和反应性变体)提供的各种方法接受静态CQL,Statement对象和PreparedStatementCreator。接受没有附加参数的静态 CQL 的方法通常按原样运行 CQL 语句,无需进一步处理。接受静态 CQL 与参数数组(例如execute(String cql, Object… args)和queryForRows(String cql, Object… args))组合的方法使用准备好的语句。在内部,这些方法创建一个PreparedStatementCreator和PreparedStatementBinder对象来准备语句,然后将值绑定到语句以运行它。Spring Data Cassandra 通常对准备好的语句使用基于索引的参数绑定。
从 Cassandra 驱动程序版本 4 开始,准备好的语句缓存在驱动程序级别,从而无需跟踪应用程序中的准备好的语句。
以下示例显示如何使用参数化的预准备语句发出查询:
String lastName = cqlTemplate.queryForObject(
"SELECT last_name FROM t_actor WHERE id = ?",
String.class, 1212L);
如果您需要对语句准备和参数绑定进行更多控制(例如,使用命名绑定参数),您可以通过使用PreparedStatementCreator和PreparedStatementBinder参数调用查询方法来完全控制准备好的语句创建和参数绑定:
List<String> lastNames = cqlTemplate.query(
session -> session.prepare("SELECT last_name FROM t_actor WHERE id = ?"),
ps -> ps.bind(1212L),
(row, rowNum) -> row.getString(0));
Spring Data Cassandra 在cql包中附带了支持该模式的类:
- SimplePreparedStatementCreator - 创建准备好的语句的实用程序类。
- ArgumentPreparedStatementBinder - 将参数绑定到准备好的语句的实用程序类。
9.11.2.使用CassandraTemplate
该CassandraTemplate班是建立在顶部CqlTemplate,以提供更高的抽象水平。可以CassandraTemplate通过调用setUsePreparedStatements(false)相应的setUseP