我不明白如何使用Spring Data Cassandra实现非常简单的目标。
我想用不同的参数值多次执行“ INSERT”语句。我目前还没有映射域类,所以我使用Spring Data提供的CqlOperations
接口。
[当我只使用execute(String cql, Object... args)
时,Cassandra驱动程序抱怨“通常,重新准备已经准备好的查询是一种反模式,可能会影响性能。考虑只准备一次语句”。因为Spring Data使用SimplePreparedStatementCreator
。但是我看不出有任何办法告诉Spring Data使用CachedPreparedStatementCreator
。我所看到的只是execute(PreparedStatementCreator psc)
方法,该方法不允许我提供参数值。
所以,有没有办法告诉Spring Data使用适当的语句缓存或实现类似于execute(PreparedStatementCreator, Object...)
的东西?
[CqlTemplate
公开了回调和自定义挂钩,这些挂钩和自定义挂钩允许根据应用程序的需求定制其某些功能。
CqlTemplate
确实有意不进行缓存,因为缓存会导致时间与空间的关系。 Spring Data Cassandra无法做出决定,因为我们无法假设应用程序通常需要什么。
Spring Data Cassandra的软件包core.cql.support
附带了对CachedPreparedStatementCreator
和为此目的可以使用的PreparedStatementCache
的支持。
子类CqlTemplate
,并重写其newPreparedStatementCreator(…)
方法以指定要使用的PreparedStatementCreator
。以下示例显示了具有无限保留的缓存的示例:
public class MyCachedCqlTemplate extends CqlTemplate {
PreparedStatementCache cache = MapPreparedStatementCache.create();
@Override
protected PreparedStatementCreator newPreparedStatementCreator(String cql) {
return CachedPreparedStatementCreator.of(cache, cql);
}
}