データ]


1概要


2 Mavenの依存関係

Mavenを使用して、

pom.xml

で依存関係を定義することから始めましょう。

<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-core</artifactId>
    <version>2.1.9</version>
</dependency>


3 Cassandra

の設定


3.1. メイン設定

@Configuration
public class CassandraConfig extends AbstractCassandraConfiguration {

    @Override
    protected String getKeyspaceName() {
        return "testKeySpace";
    }

    @Bean
    public CassandraClusterFactoryBean cluster() {
        CassandraClusterFactoryBean cluster =
          new CassandraClusterFactoryBean();
        cluster.setContactPoints("127.0.0.1");
        cluster.setPort(9142);
        return cluster;
    }

    @Bean
    public CassandraMappingContext cassandraMapping()
      throws ClassNotFoundException {
        return new BasicCassandraMappingContext();
    }
}

====

3.2. Cassandraの接続プロパティ

Cassandraクライアントの接続を設定するために設定しなければならない3つの必須設定があります。

Cassandraサーバーが実行しているホスト名をc

__ontactPointsとして設定する必要があります。 Port


は単にサーバでのリクエストの待ち受けポートです。

KeyspaceName__は、Cassandra関連の概念に基づく、ノード上のデータ複製を定義するネームスペースです。

===

4 Cassandraリポジトリ

データアクセスレイヤには

CassandraRepository

を使用します。この

====

4.1.

CassandraRepository


を作成します.

設定で使用する

CassandraRepository

を作成しましょう。

@Repository
public interface BookRepository extends CassandraRepository<Book> {
   //}

====

4.2.

CassandraRepository


の設定

@Configuration
@EnableCassandraRepositories(
  basePackages = "org.baeldung.spring.data.cassandra.repository")
public class CassandraConfig extends AbstractCassandraConfiguration {
   //}


5エンティティ

@Table
public class Book {
    @PrimaryKeyColumn(
      name = "isbn",
      ordinal = 2,
      type = PrimaryKeyType.CLUSTERED,
      ordering = Ordering.DESCENDING)
    private UUID id;
    @PrimaryKeyColumn(
      name = "title", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
    private String title;
    @PrimaryKeyColumn(
      name = "publisher", ordinal = 1, type = PrimaryKeyType.PARTITIONED)
    private String publisher;
    @Column
    private Set<String> tags = new HashSet<>();
   //standard getters and setters
}


6. 組み込みサーバでのテスト


6.1. Mavenの依存関係

Cassandraを埋め込みモードで(別のCassandraサーバーを手動でインストールせずに)実行する場合は、

cassandra-unit

関連の依存関係を

pom.xml

に追加する必要があります。

<dependency>
    <groupId>org.cassandraunit</groupId>
    <artifactId>cassandra-unit-spring</artifactId>
    <version>2.1.9.2</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
        <groupId>org.cassandraunit</groupId>
        <artifactId>cassandra-unit</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.cassandraunit</groupId>
    <artifactId>cassandra-unit-shaded</artifactId>
    <version>2.1.9.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.hectorclient</groupId>
    <artifactId>hector-core</artifactId>
    <version>2.0-0</version>
</dependency>

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CassandraConfig.class)
public class BookRepositoryIntegrationTest {
   //}


6.2. サーバーの起動と停止

外部のCassandraサーバーを実行している場合は、このセクションを無視してかまいません。

テストスイート全体に対してサーバーを1回起動する必要があるため、サーバーの起動メソッドは

@ BeforeClass

アノテーションでマークされています。

@BeforeClass
public static void startCassandraEmbedded() {
    EmbeddedCassandraServerHelper.startEmbeddedCassandra();
    Cluster cluster = Cluster.builder()
      .addContactPoints("127.0.0.1").withPort(9142).build();
    Session session = cluster.connect();
}

次に、テストスイートの実行完了後にサーバーが停止していることを確認する必要があります。

@AfterClass
public static void stopCassandraEmbedded() {
    EmbeddedCassandraServerHelper.cleanEmbeddedCassandra();
}


6.3. クリーンデータテーブル

以前のテスト実行で操作されたデータによる予期しない結果を避けるために、各テスト実行の前にデータテーブルを削除し作成することをお勧めします。

これで、サーバーの起動時にデータテーブルを作成できます。

@Before
public void createTable() {
    adminTemplate.createTable(
      true, CqlIdentifier.cqlId(DATA__TABLE__NAME),
      Book.class, new HashMap<String, Object>());
}

そして、テストケースを実行するたびにドロップします。

@After
public void dropTable() {
    adminTemplate.dropTable(CqlIdentifier.cqlId(DATA__TABLE__NAME));
}


7.

CassandraRepository


を使用したデータアクセス

上で作成した

BookRepository

を直接使用して、Cassandraデータベースのデータを永続化し、操作し、そして取り出すことができます。


7.1. 新しい本を保存する

新しい本を私たちの書店に保存することができます。

Book javaBook = new Book(
  UUIDs.timeBased(), "Head First Java", "O'Reilly Media",
  ImmutableSet.of("Computer", "Software"));
bookRepository.save(ImmutableSet.of(javaBook));

それからデータベースに挿入された本の空室状況を確認することができます。

Iterable<Book> books = bookRepository.findByTitleAndPublisher(
  "Head First Java", "O'Reilly Media");
assertEquals(javaBook.getId(), books.iterator().next().getId());


7.2. 既存の本を更新する

Latは新しい本を挿入することから始めます。

Book javaBook = new Book(
  UUIDs.timeBased(), "Head First Java", "O'Reilly Media",
  ImmutableSet.of("Computer", "Software"));
bookRepository.save(ImmutableSet.of(javaBook));

本のタイトルを取ってみましょう。

Iterable<Book> books = bookRepository.findByTitleAndPublisher(
  "Head First Java", "O'Reilly Media");

javaBook.setTitle("Head First Java Second Edition");
bookRepository.save(ImmutableSet.of(javaBook));

最後に、データベースでタイトルが更新されたかどうかを確認しましょう。

Iterable<Book> books = bookRepository.findByTitleAndPublisher(
  "Head First Java Second Edition", "O'Reilly Media");
assertEquals(
  javaBook.getTitle(), updateBooks.iterator().next().getTitle());


7.3. 既存の本を削除する

新しい本を挿入する:

Book javaBook = new Book(
  UUIDs.timeBased(), "Head First Java", "O'Reilly Media",
  ImmutableSet.of("Computer", "Software"));
bookRepository.save(ImmutableSet.of(javaBook));

次に、新しく入力した本を削除します。

bookRepository.delete(javaBook);

Iterable<Book> books = bookRepository.findByTitleAndPublisher(
  "Head First Java", "O'Reilly Media");
assertNotEquals(javaBook.getId(), books.iterator().next().getId());


7.4. すべての本を探す

新しい本を最初に挿入します。

Book javaBook = new Book(
  UUIDs.timeBased(), "Head First Java", "O'Reilly Media",
  ImmutableSet.of("Computer", "Software"));
Book dPatternBook = new Book(
  UUIDs.timeBased(), "Head Design Patterns","O'Reilly Media",
  ImmutableSet.of("Computer", "Software"));
bookRepository.save(ImmutableSet.of(javaBook));
bookRepository.save(ImmutableSet.of(dPatternBook));

すべての本を探す:

Iterable<Book> books = bookRepository.findAll();

それから私達はデータベースの彼の利用可能な本の数をチェックすることができます:

int bookCount = 0;
for (Book book : books) bookCount++;
assertEquals(bookCount, 2);


8結論


CassandraRepository

データアクセスメカニズムを使用する最も一般的なアプローチを使用して、Springデータを使用したCassandraの基本的な実践的な紹介を行いました。

上記のコードスニペットと例の実装はhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-data-cassandra[my GitHubプロジェクト]にあります。これはEclipseベースのプロジェクトです。したがって、そのままインポートして実行するのは簡単なはずです。