In this Article, I will show How to retrieve single and bulk data from
Cassandra Database with Spring Data Cassandra Template.
How to create a maven project and add required dependencies.
Tools Uses :
1) spring-data-cassandra-1.2.1.RELEASE
2) Apache-cassandra-2.1.6
3) eclipse version Luna 4.4.1.
4) Maven 3.3.3
5) JDK 1.6
Steps to be follow :
1) Create a simple maven project.
2) Add the dependencies and
3) Write a simple program to retrieve data using Spring Cassandra Template.
4) Start the Cassandra server.
5) Run the program and verify the data in cassandra.
Add the given dependency to spring-data-cassandra API,
org.springframework.data spring-data-cassandra 1.2.1.RELEASE
Complete pom.xml file code is Here,
pom.xml
4.0.0 com.devjavasource.cassandra SpringDataCassandraExample 0.0.1-SNAPSHOT jar SpringDataCassandraExample http://maven.apache.org UTF-8 junit junit 3.8.1 test com.datastax.cassandra cassandra-driver-core 2.1.6 org.springframework.data spring-data-cassandra 1.2.1.RELEASE
Write a simple program to retrieve data using Spring Cassandra Template :
This program will do the following,
1) Create a Cluster object.
Cluster cluster = null;
cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
A cluster object maintains a permanent connection to one of
the cluster nodes. builder() is a static method of Cluster class.
2) Create a session object
private static Session session;
session = cluster.connect("devjavasource");
Here “devjavasource” is the existed keyspace, I am using the same.
we can create a session object by passing key space name as parameter
to connect() method of cluster class.
3) Create CassandraOperations :
CassandraOperations is interface that helps to do Operations like select, insert, delete…etc
for interacting with Cassandra.
CassandraOperations cassandraOps = new CassandraTemplate(session);
Using select() method of CassandraTemplate class, we can select single
or multiple records from Cassandra Database.
// To select a single User information from Database
final String[] columns = new String[] { "id", "address", "name" };
Select select = QueryBuilder.select(columns).from("users");
select.where(QueryBuilder.eq("id", 11103));
final List<Users> results = cassandraOps
.select(select, Users.class);
// Another way is, by using selectOneById() method
Users selectById = cassandraOps.selectOneById(Users.class, 11101);
printList(Arrays.asList(selectById));
// To select multiple User information at a time.
// Bulk select operation
Select allUserSelect = QueryBuilder.select(columns).from("users");
final List<Users> allUsers = cassandraOps.select(allUserSelect,
Users.class);
final List<Users> allUsers1 = cassandraOps.select(
"Select * from Users", Users.class);
Four different types of select() methods are available in
Spring Data CassandraTemplate,
// Execute query and convert ResultSet to the list of entities <T> List<T> select(String cql, Class<T> type); <T> List<T> select(Select select, Class<T> type); <T> T selectOneById(Class<T> type, Object id); <T> T selectOne(String cql, Class<T> type); // Select the results Asynchronously <T> Cancellable selectOneAsynchronously(Select select, Class<T> type, QueryForObjectListener<T> listener); <T> Cancellable selectOneAsynchronously(String cql, Class<T> type, QueryForObjectListener<T> listener); <T> Cancellable selectOneAsynchronously(Select select, Class<T> type, QueryForObjectListener<T> listener, QueryOptions options); <T> Cancellable selectOneAsynchronously(String cql, Class<T> type, QueryForObjectListener<T> listener, QueryOptions options); <T> T selectOne(Select select, Class<T> type); // This is to find, whether object is exist in DB or not by given Id boolean exists(Class<?> type, Object id); // To get count of Objects long count(Class<?> type);
What is QueryForObjectListener?
This is a Listener Interface, used to receive asynchronous results
expected as an object of specified type.
This Interface having two methods,
(a) onQueryComplete – This method will be called, upon completion.
(b) onException – Called if an exception is raised while getting or
converting the Result.
Complete Source code is Here,
App.java
package com.devjavasource.cassandra.SpringDataCassandraExample;
import java.util.Arrays;
import java.util.List;
import org.springframework.data.cassandra.core.CassandraOperations;
import org.springframework.data.cassandra.core.CassandraTemplate;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.datastax.driver.core.querybuilder.Select;
import com.devjavasource.cassandra.dto.Users;
public class App {
private static Cluster cluster;
private static Session session;
public static void main(String[] args) {
try {
cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
session = cluster.connect("devjavasource");
CassandraOperations cassandraOps = new CassandraTemplate(session);
System.out
.println("Spring Data Cassandra Select Single User Example");
System.out
.println("=================================================");
// To select a single User information from Database
final String[] columns = new String[] { "id", "address", "name" };
Select select = QueryBuilder.select(columns).from("users");
select.where(QueryBuilder.eq("id", 11103));
final List<Users> results = cassandraOps
.select(select, Users.class);
printList(results);
System.out
.println("\nSpring Data Cassandra bulk User Selection Example");
System.out
.println("====================================================");
// To select multiple User information at a time.
// Bulk select operation
Select allUserSelect = QueryBuilder.select(columns).from("users");
final List<Users> allUsers = cassandraOps.select(allUserSelect,
Users.class);
printList(allUsers);
System.out
.println("====================================================");
final List<Users> allUsers1 = cassandraOps.select(
"Select * from Users", Users.class);
printList(allUsers1);
System.out
.println("====================================================");
Users selectById = cassandraOps.selectOneById(Users.class, 11101);
printList(Arrays.asList(selectById));
// The below statement will give error, while using selectOne method
// we have to ensure only Object is selected.
// final Users User = cassandraOps.selectOne(allUserSelect,
// Users.class);
// printList(Arrays.asList(User));
System.out.println("\nIs any User is exist with Id 111111 :"
+ cassandraOps.exists(Users.class, 111111));
System.out.println("Is any User is exist with Id 11101 :"
+ cassandraOps.exists(Users.class, 11101));
System.out.println("\nNo of Users available in Database is :"
+ cassandraOps.count(Users.class));
} catch (Exception e) {
e.printStackTrace();
} finally {
cluster.close();
}
}
private static void printList(final List<Users> inResults) {
for (Users user : inResults) {
System.out.println("User Id is: " + user.getId());
System.out.println("User Address is: " + user.getAddress());
System.out.println("User Name is: " + user.getName());
}
}
}
User.java
package com.devjavasource.cassandra.dto;
import org.springframework.data.cassandra.mapping.PrimaryKey;
import org.springframework.data.cassandra.mapping.Table;
@Table
public class User {
@PrimaryKey
private int id;
private String address;
private String name;
public User(int id, String address, String name) {
this.id = id;
this.address = address;
this.name = name;
}
public int getId() {
return id;
}
public String getAddress() {
return address;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "User [id=" + id + ", address=" + address + ", name=" + name
+ "]";
}
}
4) Start the Cassandra server :
Cassandra server should be up and running.
If the server is not running, run the server using following command.
Command to start Casandra server is,
C:\apache-cassandra-2.1.6\bin>cassandra.bat -f
5) Run Maven project :
Select and Run As -> Java Application.
Out Put :
Spring Data Cassandra Select Single User Example ================================================= User Id is: 11103 User Address is: Nederland User Name is: Joe Spring Data Cassandra bulk User Selection Example ==================================================== User Id is: 11103 User Address is: Nederland User Name is: Joe User Id is: 11102 User Address is: California User Name is: smith User Id is: 11101 User Address is: Oakland User Name is: john ==================================================== User Id is: 11103 User Address is: Nederland User Name is: Joe User Id is: 11102 User Address is: California User Name is: smith User Id is: 11101 User Address is: Oakland User Name is: john ==================================================== User Id is: 11101 User Address is: Oakland User Name is: john Is any User is exist with Id 111111 :false Is any User is exist with Id 11101 :true No of Users available in Database is :3
Verify the data in cassandra :
Start cqlsh shell and use key space “devjavasource” and query
for the table Users.
You can download complete project, Here
*** Venkat – Happy leaning ****
