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:
Doha2012
2017-10-30 00:07:04 +02:00
committed by Grzegorz Piwowarek
parent dbeb5f8ba4
commit 26c50909be
185 changed files with 33 additions and 20 deletions
@@ -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();
}
}
@@ -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();
}
}
@@ -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;
}
}
@@ -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);
}
}
@@ -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);
}
}