Cassandra DataStax Java Driver provides a simple object mapper, which avoids manually converting your domain classes to and from query results.
Example
Run Cassandra server and create a keyspace (my_test_keyspace) as described in this tutorial.
Maven dependency
pom.xml<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-mapping</artifactId>
<version>3.10.2</version>
</dependency>
Creating domain class
Cassandra annotations provided in com.datastax.driver.mapping.annotations package are used to map a table to a Java class:
package com.logicbig.example;
import com.datastax.driver.mapping.annotations.PartitionKey;
import com.datastax.driver.mapping.annotations.Table;
@Table(keyspace = "my_test_keyspace", name = "person")
public class Person {
@PartitionKey
private long id;
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
Using Mapper to save/get/delete Java object to/from table
package com.logicbig.example;
import com.datastax.driver.core.*;
import com.datastax.driver.mapping.Mapper;
import com.datastax.driver.mapping.MappingManager;
import java.util.List;
public class CassandraMappingObjectExample {
public static void main(String[] args) {
try (Cluster cluster = Cluster.builder()
.addContactPoint("127.0.0.1")
.withPort(9042)
.withoutJMXReporting()
.build()) {
Session session = cluster.connect("my_test_keyspace");
session.execute("CREATE TABLE IF NOT EXISTS "
+ "my_test_keyspace.PERSON (id bigint PRIMARY KEY, name text, age int)");
MappingManager manager = new MappingManager(session);
Mapper<Person> mapper = manager.mapper(Person.class);
//save person
mapper.save(new Person("Sandy", 33));
executeNativeSelectQuery(session);
//getting via mapper by primary key
Person person = mapper.get(0L);
System.out.println(person);
//getting via mapper by primary key
mapper.delete(0L);//delete by primary key
executeNativeSelectQuery(session);
//dropping table at the end
session.execute("DROP TABLE my_test_keyspace.PERSON");
}
}
private static void executeNativeSelectQuery(Session session) {
System.out.println("-- select query --");
ResultSet rs = session.execute("select * from my_test_keyspace.Person");
List<Row> rows = rs.all();
System.out.println("rows: " + rows.size());
for (Row row : rows) {
long id = row.getLong("id");
System.out.println("Id: " + id);
String name = row.getString("name");
System.out.println("name: " + name);
int age = row.getInt("age");
System.out.println("age: " + age);
}
}
}
-- select query -- rows: 1 Id: 0 name: Sandy age: 33 Person{id=0, name='Sandy', age=33} -- select query -- rows: 0
Primary key, Partition Key and Clustering key
A primary key uniquely identifies a row.
A partition key is used to lookup a partition which is nothing but a set of rows. This is responsible for data distribution across the nodes.
The Primary Key is equivalent to the Partition Key in a single-field-key (not composite key) table.
The Clustering Key is responsible for data sorting within the partition.
Example ProjectDependencies and Technologies Used: - cassandra-driver-mapping 3.10.2: Object mapper for the DataStax CQL Java Driver.
- JDK 8
- Maven 3.5.4
|