group persistence modules (#2890)
* move security content from spring-security-rest-full * swagger update * move query language to new module * rename spring-security-rest-full to spring-rest-full * group persistence modules
This commit is contained in:
committed by
Grzegorz Piwowarek
parent
dbeb5f8ba4
commit
26c50909be
+44
@@ -0,0 +1,44 @@
|
||||
package com.baeldung.cassandra.java.client;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.baeldung.cassandra.java.client.domain.Book;
|
||||
import com.baeldung.cassandra.java.client.repository.BookRepository;
|
||||
import com.baeldung.cassandra.java.client.repository.KeyspaceRepository;
|
||||
import com.datastax.driver.core.Session;
|
||||
import com.datastax.driver.core.utils.UUIDs;
|
||||
|
||||
public class CassandraClient {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(CassandraClient.class);
|
||||
|
||||
public static void main(String args[]) {
|
||||
CassandraConnector connector = new CassandraConnector();
|
||||
connector.connect("127.0.0.1", null);
|
||||
Session session = connector.getSession();
|
||||
|
||||
KeyspaceRepository sr = new KeyspaceRepository(session);
|
||||
sr.createKeyspace("library", "SimpleStrategy", 1);
|
||||
sr.useKeyspace("library");
|
||||
|
||||
BookRepository br = new BookRepository(session);
|
||||
br.createTable();
|
||||
br.alterTablebooks("publisher", "text");
|
||||
|
||||
br.createTableBooksByTitle();
|
||||
|
||||
Book book = new Book(UUIDs.timeBased(), "Effective Java", "Joshua Bloch", "Programming");
|
||||
br.insertBookBatch(book);
|
||||
|
||||
br.selectAll().forEach(o -> LOG.info("Title in books: " + o.getTitle()));
|
||||
br.selectAllBookByTitle().forEach(o -> LOG.info("Title in booksByTitle: " + o.getTitle()));
|
||||
|
||||
br.deletebookByTitle("Effective Java");
|
||||
br.deleteTable("books");
|
||||
br.deleteTable("booksByTitle");
|
||||
|
||||
sr.deleteKeyspace("library");
|
||||
|
||||
connector.close();
|
||||
}
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
package com.baeldung.cassandra.java.client;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.datastax.driver.core.Cluster;
|
||||
import com.datastax.driver.core.Cluster.Builder;
|
||||
import com.datastax.driver.core.Host;
|
||||
import com.datastax.driver.core.Metadata;
|
||||
import com.datastax.driver.core.Session;
|
||||
|
||||
/**
|
||||
*
|
||||
* This is an implementation of a simple Java client.
|
||||
*
|
||||
*/
|
||||
public class CassandraConnector {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(CassandraConnector.class);
|
||||
|
||||
private Cluster cluster;
|
||||
|
||||
private Session session;
|
||||
|
||||
public void connect(final String node, final Integer port) {
|
||||
|
||||
Builder b = Cluster.builder().addContactPoint(node);
|
||||
|
||||
if (port != null) {
|
||||
b.withPort(port);
|
||||
}
|
||||
cluster = b.build();
|
||||
|
||||
Metadata metadata = cluster.getMetadata();
|
||||
LOG.info("Cluster name: " + metadata.getClusterName());
|
||||
|
||||
for (Host host : metadata.getAllHosts()) {
|
||||
LOG.info("Datacenter: " + host.getDatacenter() + " Host: " + host.getAddress() + " Rack: " + host.getRack());
|
||||
}
|
||||
|
||||
session = cluster.connect();
|
||||
}
|
||||
|
||||
public Session getSession() {
|
||||
return this.session;
|
||||
}
|
||||
|
||||
public void close() {
|
||||
session.close();
|
||||
cluster.close();
|
||||
}
|
||||
}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
package com.baeldung.cassandra.java.client.domain;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class Book {
|
||||
|
||||
private UUID id;
|
||||
|
||||
private String title;
|
||||
|
||||
private String author;
|
||||
|
||||
private String subject;
|
||||
|
||||
private String publisher;
|
||||
|
||||
Book() {
|
||||
}
|
||||
|
||||
public Book(UUID id, String title, String author, String subject) {
|
||||
this.id = id;
|
||||
this.title = title;
|
||||
this.author = author;
|
||||
this.subject = subject;
|
||||
}
|
||||
|
||||
public UUID getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(UUID id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public String getAuthor() {
|
||||
return author;
|
||||
}
|
||||
|
||||
public void setAuthor(String author) {
|
||||
this.author = author;
|
||||
}
|
||||
|
||||
public String getSubject() {
|
||||
return subject;
|
||||
}
|
||||
|
||||
public void setSubject(String subject) {
|
||||
this.subject = subject;
|
||||
}
|
||||
|
||||
public String getPublisher() {
|
||||
return publisher;
|
||||
}
|
||||
|
||||
public void setPublisher(String publisher) {
|
||||
this.publisher = publisher;
|
||||
}
|
||||
}
|
||||
+173
@@ -0,0 +1,173 @@
|
||||
package com.baeldung.cassandra.java.client.repository;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.baeldung.cassandra.java.client.domain.Book;
|
||||
import com.datastax.driver.core.ResultSet;
|
||||
import com.datastax.driver.core.Row;
|
||||
import com.datastax.driver.core.Session;
|
||||
|
||||
public class BookRepository {
|
||||
|
||||
private static final String TABLE_NAME = "books";
|
||||
|
||||
private static final String TABLE_NAME_BY_TITLE = TABLE_NAME + "ByTitle";
|
||||
|
||||
private Session session;
|
||||
|
||||
public BookRepository(Session session) {
|
||||
this.session = session;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the books table.
|
||||
*/
|
||||
public void createTable() {
|
||||
StringBuilder sb = new StringBuilder("CREATE TABLE IF NOT EXISTS ").append(TABLE_NAME).append("(").append("id uuid PRIMARY KEY, ").append("title text,").append("author text,").append("subject text);");
|
||||
|
||||
final String query = sb.toString();
|
||||
session.execute(query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the books table.
|
||||
*/
|
||||
public void createTableBooksByTitle() {
|
||||
StringBuilder sb = new StringBuilder("CREATE TABLE IF NOT EXISTS ").append(TABLE_NAME_BY_TITLE).append("(").append("id uuid, ").append("title text,").append("PRIMARY KEY (title, id));");
|
||||
|
||||
final String query = sb.toString();
|
||||
session.execute(query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Alters the table books and adds an extra column.
|
||||
*/
|
||||
public void alterTablebooks(String columnName, String columnType) {
|
||||
StringBuilder sb = new StringBuilder("ALTER TABLE ").append(TABLE_NAME).append(" ADD ").append(columnName).append(" ").append(columnType).append(";");
|
||||
|
||||
final String query = sb.toString();
|
||||
session.execute(query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a row in the table books.
|
||||
*
|
||||
* @param book
|
||||
*/
|
||||
public void insertbook(Book book) {
|
||||
StringBuilder sb = new StringBuilder("INSERT INTO ").append(TABLE_NAME).append("(id, title, author, subject) ").append("VALUES (").append(book.getId()).append(", '").append(book.getTitle()).append("', '").append(book.getAuthor()).append("', '")
|
||||
.append(book.getSubject()).append("');");
|
||||
|
||||
final String query = sb.toString();
|
||||
session.execute(query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a row in the table booksByTitle.
|
||||
* @param book
|
||||
*/
|
||||
public void insertbookByTitle(Book book) {
|
||||
StringBuilder sb = new StringBuilder("INSERT INTO ").append(TABLE_NAME_BY_TITLE).append("(id, title) ").append("VALUES (").append(book.getId()).append(", '").append(book.getTitle()).append("');");
|
||||
|
||||
final String query = sb.toString();
|
||||
session.execute(query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a book into two identical tables using a batch query.
|
||||
*
|
||||
* @param book
|
||||
*/
|
||||
public void insertBookBatch(Book book) {
|
||||
StringBuilder sb = new StringBuilder("BEGIN BATCH ").append("INSERT INTO ").append(TABLE_NAME).append("(id, title, author, subject) ").append("VALUES (").append(book.getId()).append(", '").append(book.getTitle()).append("', '").append(book.getAuthor())
|
||||
.append("', '").append(book.getSubject()).append("');").append("INSERT INTO ").append(TABLE_NAME_BY_TITLE).append("(id, title) ").append("VALUES (").append(book.getId()).append(", '").append(book.getTitle()).append("');")
|
||||
.append("APPLY BATCH;");
|
||||
|
||||
final String query = sb.toString();
|
||||
session.execute(query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Select book by id.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Book selectByTitle(String title) {
|
||||
StringBuilder sb = new StringBuilder("SELECT * FROM ").append(TABLE_NAME_BY_TITLE).append(" WHERE title = '").append(title).append("';");
|
||||
|
||||
final String query = sb.toString();
|
||||
|
||||
ResultSet rs = session.execute(query);
|
||||
|
||||
List<Book> books = new ArrayList<Book>();
|
||||
|
||||
for (Row r : rs) {
|
||||
Book s = new Book(r.getUUID("id"), r.getString("title"), null, null);
|
||||
books.add(s);
|
||||
}
|
||||
|
||||
return books.get(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Select all books from books
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public List<Book> selectAll() {
|
||||
StringBuilder sb = new StringBuilder("SELECT * FROM ").append(TABLE_NAME);
|
||||
|
||||
final String query = sb.toString();
|
||||
ResultSet rs = session.execute(query);
|
||||
|
||||
List<Book> books = new ArrayList<Book>();
|
||||
|
||||
for (Row r : rs) {
|
||||
Book book = new Book(r.getUUID("id"), r.getString("title"), r.getString("author"), r.getString("subject"));
|
||||
books.add(book);
|
||||
}
|
||||
return books;
|
||||
}
|
||||
|
||||
/**
|
||||
* Select all books from booksByTitle
|
||||
* @return
|
||||
*/
|
||||
public List<Book> selectAllBookByTitle() {
|
||||
StringBuilder sb = new StringBuilder("SELECT * FROM ").append(TABLE_NAME_BY_TITLE);
|
||||
|
||||
final String query = sb.toString();
|
||||
ResultSet rs = session.execute(query);
|
||||
|
||||
List<Book> books = new ArrayList<Book>();
|
||||
|
||||
for (Row r : rs) {
|
||||
Book book = new Book(r.getUUID("id"), r.getString("title"), null, null);
|
||||
books.add(book);
|
||||
}
|
||||
return books;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a book by title.
|
||||
*/
|
||||
public void deletebookByTitle(String title) {
|
||||
StringBuilder sb = new StringBuilder("DELETE FROM ").append(TABLE_NAME_BY_TITLE).append(" WHERE title = '").append(title).append("';");
|
||||
|
||||
final String query = sb.toString();
|
||||
session.execute(query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete table.
|
||||
*
|
||||
* @param tableName the name of the table to delete.
|
||||
*/
|
||||
public void deleteTable(String tableName) {
|
||||
StringBuilder sb = new StringBuilder("DROP TABLE IF EXISTS ").append(tableName);
|
||||
|
||||
final String query = sb.toString();
|
||||
session.execute(query);
|
||||
}
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
package com.baeldung.cassandra.java.client.repository;
|
||||
|
||||
import com.datastax.driver.core.Session;
|
||||
|
||||
/**
|
||||
* Repository to handle the Cassandra schema.
|
||||
*
|
||||
*/
|
||||
public class KeyspaceRepository {
|
||||
private Session session;
|
||||
|
||||
public KeyspaceRepository(Session session) {
|
||||
this.session = session;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method used to create any keyspace - schema.
|
||||
*
|
||||
* @param schemaName the name of the schema.
|
||||
* @param replicatioonStrategy the replication strategy.
|
||||
* @param numberOfReplicas the number of replicas.
|
||||
*
|
||||
*/
|
||||
public void createKeyspace(String keyspaceName, String replicatioonStrategy, int numberOfReplicas) {
|
||||
StringBuilder sb = new StringBuilder("CREATE KEYSPACE IF NOT EXISTS ").append(keyspaceName).append(" WITH replication = {").append("'class':'").append(replicatioonStrategy).append("','replication_factor':").append(numberOfReplicas).append("};");
|
||||
|
||||
final String query = sb.toString();
|
||||
|
||||
session.execute(query);
|
||||
}
|
||||
|
||||
public void useKeyspace(String keyspace) {
|
||||
session.execute("USE " + keyspace);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method used to delete the specified schema.
|
||||
* It results in the immediate, irreversable removal of the keyspace, including all tables and data contained in the keyspace.
|
||||
*
|
||||
* @param schemaName the name of the keyspace to delete.
|
||||
*/
|
||||
public void deleteKeyspace(String keyspaceName) {
|
||||
StringBuilder sb = new StringBuilder("DROP KEYSPACE ").append(keyspaceName);
|
||||
|
||||
final String query = sb.toString();
|
||||
|
||||
session.execute(query);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user