diff --git a/persistence-modules/scylladb/pom.xml b/persistence-modules/scylladb/pom.xml
new file mode 100644
index 0000000000..e457c75d91
--- /dev/null
+++ b/persistence-modules/scylladb/pom.xml
@@ -0,0 +1,85 @@
+
+
+ 4.0.0
+ com.baeldung.examples.scylladb
+ scylladb
+ 0.0.1-SNAPSHOT
+ scylladb
+ Sample ScyllaDB Project
+
+ 1.17.6
+
+
+ com.baeldung
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../../parent-boot-2
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ com.scylladb
+ java-driver-core
+ 4.14.1.0
+
+
+ com.scylladb
+ java-driver-query-builder
+ 4.14.1.0
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.testcontainers
+ testcontainers
+ test
+
+
+ org.testcontainers
+ junit-jupiter
+ test
+
+
+
+
+
+ org.testcontainers
+ testcontainers-bom
+ ${testcontainers.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
+
diff --git a/persistence-modules/scylladb/src/main/java/com/baeldung/scylladb/ScylladbApplication.java b/persistence-modules/scylladb/src/main/java/com/baeldung/scylladb/ScylladbApplication.java
new file mode 100644
index 0000000000..3e6cea7ed2
--- /dev/null
+++ b/persistence-modules/scylladb/src/main/java/com/baeldung/scylladb/ScylladbApplication.java
@@ -0,0 +1,89 @@
+package com.baeldung.scylladb;
+
+import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.insertInto;
+import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.literal;
+import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.selectFrom;
+import static com.datastax.oss.driver.api.querybuilder.SchemaBuilder.createKeyspace;
+import static com.datastax.oss.driver.api.querybuilder.SchemaBuilder.createTable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.baeldung.scylladb.model.User;
+import com.datastax.oss.driver.api.core.CqlSession;
+import com.datastax.oss.driver.api.core.cql.ResultSet;
+import com.datastax.oss.driver.api.core.cql.Row;
+import com.datastax.oss.driver.api.core.cql.SimpleStatement;
+import com.datastax.oss.driver.api.core.type.DataTypes;
+import com.datastax.oss.driver.api.querybuilder.insert.InsertInto;
+import com.datastax.oss.driver.api.querybuilder.schema.CreateKeyspaceStart;
+import com.datastax.oss.driver.api.querybuilder.schema.CreateTableStart;
+import com.datastax.oss.driver.api.querybuilder.select.Select;
+
+public class ScylladbApplication {
+
+ private String keySpaceName;
+ private String tableName;
+
+ public ScylladbApplication(String keySpaceName, String tableName) {
+ this.keySpaceName = keySpaceName;
+ this.tableName = tableName;
+ CreateKeyspaceStart createKeyspace = createKeyspace(keySpaceName);
+ SimpleStatement keypaceStatement = createKeyspace.ifNotExists()
+ .withSimpleStrategy(3)
+ .build();
+
+ CreateTableStart createTable = createTable(keySpaceName, tableName);
+ SimpleStatement tableStatement = createTable.ifNotExists()
+ .withPartitionKey("id", DataTypes.BIGINT)
+ .withColumn("name", DataTypes.TEXT)
+ .build();
+
+ try (CqlSession session = CqlSession.builder().build()) {
+ ResultSet rs = session.execute(keypaceStatement);
+ if (null == rs.getExecutionInfo().getErrors() || rs.getExecutionInfo().getErrors().isEmpty()) {
+ rs = session.execute(tableStatement);
+ }
+ }
+ }
+
+ public List getAllUserNames() {
+ List userNames = new ArrayList<>();
+ try (CqlSession session = CqlSession.builder().build()) {
+ String query = String.format("select * from %s.%s",keySpaceName,tableName);
+ ResultSet rs = session.execute(query);
+ for (Row r : rs.all())
+ userNames.add(r.getString("name"));
+ }
+ return userNames;
+ }
+
+ public List getUsersByUserName(String userName) {
+ List userList = new ArrayList<>();
+ try (CqlSession session = CqlSession.builder().build()) {
+ Select query = selectFrom(keySpaceName, tableName).all()
+ .whereColumn("name")
+ .isEqualTo(literal(userName))
+ .allowFiltering();
+ SimpleStatement statement = query.build();
+ ResultSet rs = session.execute(statement);
+ for (Row r : rs)
+ userList.add(new User(r.getLong("id"), r.getString("name")));
+ }
+ return userList;
+ }
+
+ public boolean addNewUser(User user) {
+ boolean response = false;
+ try (CqlSession session = CqlSession.builder().build()) {
+ InsertInto insert = insertInto(keySpaceName, tableName);
+ SimpleStatement statement = insert.value("id", literal(user.getId()))
+ .value("name", literal(user.getName()))
+ .build();
+ ResultSet rs = session.execute(statement);
+ response = null == rs.getExecutionInfo().getErrors() || rs.getExecutionInfo().getErrors().isEmpty();
+ }
+ return response;
+ }
+
+}
diff --git a/persistence-modules/scylladb/src/main/java/com/baeldung/scylladb/model/User.java b/persistence-modules/scylladb/src/main/java/com/baeldung/scylladb/model/User.java
new file mode 100644
index 0000000000..28d60112b9
--- /dev/null
+++ b/persistence-modules/scylladb/src/main/java/com/baeldung/scylladb/model/User.java
@@ -0,0 +1,17 @@
+package com.baeldung.scylladb.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+public class User {
+
+ private long id;
+
+ private String name;
+}
diff --git a/persistence-modules/scylladb/src/main/resources/application.yml b/persistence-modules/scylladb/src/main/resources/application.yml
new file mode 100644
index 0000000000..3a4abad3dd
--- /dev/null
+++ b/persistence-modules/scylladb/src/main/resources/application.yml
@@ -0,0 +1,3 @@
+datastax-java-driver:
+ basic:
+ contact-points: 127.0.0.1:9042
\ No newline at end of file
diff --git a/persistence-modules/scylladb/src/test/java/com/baeldung/scylladb/ScyllaDBApplicationLiveTest.java b/persistence-modules/scylladb/src/test/java/com/baeldung/scylladb/ScyllaDBApplicationLiveTest.java
new file mode 100644
index 0000000000..4e3cb00a41
--- /dev/null
+++ b/persistence-modules/scylladb/src/test/java/com/baeldung/scylladb/ScyllaDBApplicationLiveTest.java
@@ -0,0 +1,68 @@
+package com.baeldung.scylladb;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+import java.util.function.Consumer;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
+import org.testcontainers.utility.DockerImageName;
+
+import com.baeldung.scylladb.model.User;
+import com.github.dockerjava.api.command.CreateContainerCmd;
+import com.github.dockerjava.api.model.ExposedPort;
+import com.github.dockerjava.api.model.PortBinding;
+import com.github.dockerjava.api.model.Ports;
+
+@Testcontainers
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+public class ScyllaDBApplicationLiveTest {
+
+ private static final String IMAGE_NAME = "scylladb/scylla";
+ private static final int hostPort = 9042;
+ private static final int containerExposedPort = 9042;
+ private static Consumer cmd = e -> e.withPortBindings(new PortBinding(Ports.Binding.bindPort(hostPort),
+ new ExposedPort(containerExposedPort)));
+
+ @Container
+ private static final GenericContainer scyllaDbContainer = new GenericContainer(DockerImageName.parse(IMAGE_NAME))
+ .withExposedPorts(containerExposedPort)
+ .withCreateContainerCmdModifier(cmd);
+
+ private ScylladbApplication scylladbApplication;
+
+ @BeforeAll
+ void setUp() {
+ scylladbApplication = new ScylladbApplication("baeldung", "User");
+ }
+
+ @Test
+ public void givenKeySpaceAndTable_whenInsertData_thenShouldBeAbleToFindData() {
+ User user = new User(10, "John");
+ scylladbApplication.addNewUser(user);
+
+ List userList = scylladbApplication.getUsersByUserName("John");
+ assertEquals(1, userList.size());
+ assertEquals("John", userList.get(0).getName());
+ assertEquals(10, userList.get(0).getId());
+
+ }
+
+ @Test
+ public void givenKeySpaceAndTable_whenInsertData_thenRowCountIncreases() {
+ int initialCount = scylladbApplication.getAllUserNames().size();
+ User user = new User(11, "Doe");
+ scylladbApplication.addNewUser(user);
+
+ int expectedCount = initialCount+1;
+ int updatedCount = scylladbApplication.getAllUserNames().size();
+ assertEquals(expectedCount, updatedCount);
+
+ }
+
+}
diff --git a/persistence-modules/scylladb/src/test/resources/application.yml b/persistence-modules/scylladb/src/test/resources/application.yml
new file mode 100644
index 0000000000..3a4abad3dd
--- /dev/null
+++ b/persistence-modules/scylladb/src/test/resources/application.yml
@@ -0,0 +1,3 @@
+datastax-java-driver:
+ basic:
+ contact-points: 127.0.0.1:9042
\ No newline at end of file