Skip to content

Commit c06471c

Browse files
j7-juarezKevinGilmore
authored andcommitted
BAEL-3043: Datastax Java Driver for Apache Cassandra (eugenp#7290)
1 parent 02c8af2 commit c06471c

File tree

6 files changed

+262
-1
lines changed

6 files changed

+262
-1
lines changed

persistence-modules/java-cassandra/pom.xml

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>com.baeldung</groupId>
55
<artifactId>java-cassandra</artifactId>
66
<version>1.0.0-SNAPSHOT</version>
7-
<name>java-cassandra</name>
7+
<name>java-cassandra</name>
88

99
<parent>
1010
<groupId>com.baeldung</groupId>
@@ -29,6 +29,19 @@
2929
<version>${cassandra-unit.version}</version>
3030
</dependency>
3131

32+
<!-- DataStax Cassandra -->
33+
<dependency>
34+
<groupId>com.datastax.oss</groupId>
35+
<artifactId>java-driver-core</artifactId>
36+
<version>${datastax-cassandra.version}</version>
37+
</dependency>
38+
39+
<dependency>
40+
<groupId>io.netty</groupId>
41+
<artifactId>netty-handler</artifactId>
42+
<version>${io-netty.version}</version>
43+
</dependency>
44+
3245
</dependencies>
3346

3447
<build>
@@ -39,6 +52,8 @@
3952
<!-- Cassandra -->
4053
<cassandra-driver-core.version>3.1.2</cassandra-driver-core.version>
4154
<cassandra-unit.version>3.1.1.0</cassandra-unit.version>
55+
<datastax-cassandra.version>4.1.0</datastax-cassandra.version>
56+
<io-netty.version>4.1.34.Final</io-netty.version>
4257
<guava.version>18.0</guava.version>
4358
</properties>
4459

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.baeldung.datastax.cassandra;
2+
3+
import com.baeldung.datastax.cassandra.domain.Video;
4+
import com.baeldung.datastax.cassandra.repository.KeyspaceRepository;
5+
import com.baeldung.datastax.cassandra.repository.VideoRepository;
6+
import com.datastax.oss.driver.api.core.CqlSession;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
10+
import java.time.Instant;
11+
import java.time.temporal.ChronoUnit;
12+
import java.util.List;
13+
14+
public class Application {
15+
16+
private static final Logger LOG = LoggerFactory.getLogger(Application.class);
17+
18+
public static void main(String[] args) {
19+
new Application().run();
20+
}
21+
22+
public void run() {
23+
CassandraConnector connector = new CassandraConnector();
24+
connector.connect("127.0.0.1", 9042, "datacenter1");
25+
CqlSession session = connector.getSession();
26+
27+
KeyspaceRepository keyspaceRepository = new KeyspaceRepository(session);
28+
29+
keyspaceRepository.createKeyspace("testKeyspace", "SimpleStrategy", 1);
30+
keyspaceRepository.useKeyspace("testKeyspace");
31+
32+
VideoRepository videoRepository = new VideoRepository(session);
33+
34+
videoRepository.createTable();
35+
36+
videoRepository.insertVideo(new Video("Video Title 1", Instant.now()));
37+
videoRepository.insertVideo(new Video("Video Title 2",
38+
Instant.now().minus(1, ChronoUnit.DAYS)));
39+
40+
List<Video> videos = videoRepository.selectAll();
41+
42+
videos.forEach(x -> LOG.info(x.toString()));
43+
44+
connector.close();
45+
}
46+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.baeldung.datastax.cassandra;
2+
3+
import com.datastax.oss.driver.api.core.CqlSession;
4+
import com.datastax.oss.driver.api.core.CqlSessionBuilder;
5+
6+
import java.net.InetSocketAddress;
7+
8+
public class CassandraConnector {
9+
10+
private CqlSession session;
11+
12+
public void connect(final String node, final Integer port, final String dataCenter) {
13+
CqlSessionBuilder builder = CqlSession.builder();
14+
builder.addContactPoint(new InetSocketAddress(node, port));
15+
builder.withLocalDatacenter(dataCenter);
16+
17+
session = builder.build();
18+
}
19+
20+
public CqlSession getSession() {
21+
return this.session;
22+
}
23+
24+
public void close() {
25+
session.close();
26+
}
27+
28+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.baeldung.datastax.cassandra.domain;
2+
3+
import java.time.Instant;
4+
import java.util.UUID;
5+
6+
public class Video {
7+
8+
private UUID id;
9+
private String title;
10+
private Instant creationDate;
11+
12+
public Video(UUID id, String title, Instant creationDate) {
13+
this.id = id;
14+
this.title = title;
15+
this.creationDate = creationDate;
16+
}
17+
18+
public Video(String title, Instant creationDate) {
19+
this.title = title;
20+
this.creationDate = creationDate;
21+
}
22+
23+
public UUID getId() {
24+
return id;
25+
}
26+
27+
public void setId(UUID id) {
28+
this.id = id;
29+
}
30+
31+
public String getTitle() {
32+
return title;
33+
}
34+
35+
public void setTitle(String title) {
36+
this.title = title;
37+
}
38+
39+
public Instant getCreationDate() {
40+
return creationDate;
41+
}
42+
43+
public void setCreationDate(Instant creationDate) {
44+
this.creationDate = creationDate;
45+
}
46+
47+
@Override
48+
public String toString() {
49+
return "[id:" + id.toString() + ", title:" + title + ", creationDate: " + creationDate.toString() + "]";
50+
}
51+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.baeldung.datastax.cassandra.repository;
2+
3+
import com.datastax.oss.driver.api.core.CqlSession;
4+
5+
public class KeyspaceRepository {
6+
private final CqlSession session;
7+
8+
public KeyspaceRepository(CqlSession session) {
9+
this.session = session;
10+
}
11+
12+
public void createKeyspace(String keyspaceName, String replicationStrategy, int numberOfReplicas) {
13+
StringBuilder sb = new StringBuilder("CREATE KEYSPACE IF NOT EXISTS ").append(keyspaceName)
14+
.append(" WITH replication = {")
15+
.append("'class':'").append(replicationStrategy)
16+
.append("','replication_factor':").append(numberOfReplicas)
17+
.append("};");
18+
19+
final String query = sb.toString();
20+
21+
session.execute(query);
22+
}
23+
24+
public void useKeyspace(String keyspace) {
25+
session.execute("USE " + keyspace);
26+
}
27+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package com.baeldung.datastax.cassandra.repository;
2+
3+
import com.baeldung.datastax.cassandra.domain.Video;
4+
import com.datastax.oss.driver.api.core.CqlIdentifier;
5+
import com.datastax.oss.driver.api.core.CqlSession;
6+
import com.datastax.oss.driver.api.core.cql.BoundStatement;
7+
import com.datastax.oss.driver.api.core.cql.PreparedStatement;
8+
import com.datastax.oss.driver.api.core.cql.ResultSet;
9+
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
10+
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
import java.util.UUID;
14+
15+
public class VideoRepository {
16+
17+
private static final String TABLE_NAME = "videos";
18+
19+
private final CqlSession session;
20+
21+
public VideoRepository(CqlSession session) {
22+
this.session = session;
23+
}
24+
25+
public void createTable() {
26+
createTable(null);
27+
}
28+
29+
public void createTable(String keyspace) {
30+
StringBuilder sb = new StringBuilder("CREATE TABLE IF NOT EXISTS ").append(TABLE_NAME).append(" (")
31+
.append("video_id UUID,")
32+
.append("title TEXT,")
33+
.append("creation_date TIMESTAMP,")
34+
.append("PRIMARY KEY(video_id));");
35+
36+
String query = sb.toString();
37+
38+
executeStatement(SimpleStatement.newInstance(query), keyspace);
39+
}
40+
41+
public UUID insertVideo(Video video) {
42+
return insertVideo(video, null);
43+
}
44+
45+
public UUID insertVideo(Video video, String keyspace) {
46+
UUID videoId = UUID.randomUUID();
47+
48+
video.setId(videoId);
49+
50+
String absoluteTableName = keyspace != null ? keyspace + "." + TABLE_NAME: TABLE_NAME;
51+
52+
StringBuilder sb = new StringBuilder("INSERT INTO ").append(absoluteTableName)
53+
.append("(video_id, title, creation_date) values (:video_id, :title, :creation_date)");
54+
55+
PreparedStatement preparedStatement = session.prepare(sb.toString());
56+
57+
BoundStatement statement = preparedStatement.bind()
58+
.setUuid("video_id", video.getId())
59+
.setString("title", video.getTitle())
60+
.setInstant("creation_date", video.getCreationDate());
61+
62+
session.execute(statement);
63+
64+
return videoId;
65+
}
66+
67+
public List<Video> selectAll() {
68+
return selectAll(null);
69+
}
70+
71+
public List<Video> selectAll(String keyspace) {
72+
StringBuilder sb = new StringBuilder("SELECT * FROM ").append(TABLE_NAME);
73+
74+
String query = sb.toString();
75+
76+
ResultSet resultSet = executeStatement(SimpleStatement.newInstance(query), keyspace);
77+
78+
List<Video> result = new ArrayList<>();
79+
80+
resultSet.forEach(x -> result.add(
81+
new Video(x.getUuid("video_id"), x.getString("title"), x.getInstant("creation_date"))
82+
));
83+
84+
return result;
85+
}
86+
87+
private ResultSet executeStatement(SimpleStatement statement, String keyspace) {
88+
if (keyspace != null) {
89+
statement.setKeyspace(CqlIdentifier.fromCql(keyspace));
90+
}
91+
92+
return session.execute(statement);
93+
}
94+
}

0 commit comments

Comments
 (0)