2017-11-04 15 views
0

Cassandra Operations Interfaceとセッションを使用してQuery Builderの代わりにPrepared Statement /が必要 すべてのサンプルまたは最近のドキュメント。カサンドラは、スプリング・データ・カサンドラのV1.XのためのJavaCassandra Operationsを使用したCassandra Prepared Statementの使用Springブート

+0


アプリのサンプルでは、​​ '春データcassandra'ていますか? –

+0

yes Springデータを使用するAjit Cassandra –

答えて

1

の例であるので、同様のAPIが廃止されたJava datastaxドライバを使用しながら、プリペアドステートメントを使用する方法を確認するためにthisを参照してください。

しかし、私はすべてのpreparedstatmentsをキャッシュ(マップなど)に保存することをお勧めします。アプリケーションが初期化してからrequreidでboundstatmentを作成すると、同じものを再利用します。たとえば :

//Here Key is query string 
private static final Map<String, PreparedStatement> psMap = new ConcurrentHashMap<String, PreparedStatement>(); 

//Will be invoked @ initialization 
public void init(Session session) { 
     this.session = session; 
     for (QuerySetEnum cql : QuerySetEnum.values()) { 

      psMap.put(cql.getStatement(), session.prepare(cql.getStatement())); 
     } 


     //In Dao Impl class 
     //Get bounded statment + execute by passing the value 
     @Override 
    public void decreaseStats(long size, long count, String mapname, 
      int bucketId) { 
     BoundStatement boundStatement = getBoundStatement(QuerySetEnum.DECREASE_STATS); 
     metaTemplate.execute(boundStatement.bind(size, count, mapname, 
       bucketId)); 

    } 
//Below is the implementation how to get BoundStatement out to prepared statment cache 
    private BoundStatement getBoundStatement(QuerySetEnum query) { 
     PreparedStatement preparedStatement = queryPool 
       .getPreparedStatement(query); 
     BoundStatement boundStatement = new BoundStatement(preparedStatement); 
     return boundStatement; 
    } 
0

を使用するため、org.springframework.cassandra.core.CqlOperationsのgetSession()メソッドを使用すると、直接セッションにアクセスしてみましょうことができます。 V2.0ここ

https://github.com/opencredo/spring-data-cassandra-example/

@Autowired 
private CqlOperations cqlTemplate;//or inherited interface, like CassandraOperations 

private void insertEventUsingPreparedStatement() { 
    PreparedStatement preparedStatement = cqlTemplate.getSession().prepare("insert into event (id, type, bucket, tags) values (?, ?, ?, ?)"); 
    Statement insertStatement = preparedStatement.bind(UUIDs.timeBased(), "type2", TIME_BUCKET, ImmutableSet.of("tag1", "tag2")); 
    cqlTemplate.execute(insertStatement); 
} 
+0

CassandraOperationsまたはCqlTemplateインターフェイスを使用して特定の行のオブジェクトを指定するwhere句でテーブルをクエリする必要があります。上記のcqlTemplate.execute(insertStatement);返り値void –

0

利用スプリング・データ・カサンドラ、それはあなたのためのすべての魔法を行います。 http://valchkou.com/spring-boot-cassandra.html#simple

@Repository 
interface ISensorMeasureRepository extends CassandraRepository<SensorMeasureEntity> { 

    @Query('select * from sensor_measures_simple where sensor_id=?0 and measure_time>=?1 and measure_time<=?2') 
    List<SensorMeasureEntity> getBySensorAndDateRange(int sensorId, Date start, Date end) 

    @Query('select * from sensor_measures_simple where sensor_id=?0 ALLOW FILTERING') 
    Stream<SensorMeasureEntity> getAllBySensor(int sensorId) 
} 
+0

ちょっと、ありがと... @Queryアノテーションはプリペアドステートメントか生のcqlクエリを利用していますか? –

関連する問題