Рубрики
Без рубрики

Руководство по Eclipse Nosql

Узнайте, как использовать Eclipse Juno SQL для работы с базами данных NoSQL

Автор оригинала: baeldung.

1. Обзор

Eclipse Nosql – это набор API и реализаций, которые упрощают взаимодействие Java-приложений с базами данных NoSQL .

В этой статье мы узнаем, как настроить и настроить JNoSQL для взаимодействия с базой данных NoSQL. Мы будем работать как с коммуникационным, так и с картографическим уровнем.

2. Коммуникационный Уровень Eclipse Nosql

Технически говоря, уровень связи состоит из двух модулей: API и драйвера.

В то время как API определяет абстракцию для типов баз данных NoSQL, драйвер предоставляет реализации для большинства известных баз данных .

Мы можем сравнить это с API JDBC и драйвером JDBC в реляционных базах данных.

2.1. Eclipse Nosql Diana API

Проще говоря, существует четыре основных типа баз данных NoSQL: Ключ-значение, Столбец, Документ и график.

И Eclipse Nosql Diana API определяет три модуля:

  1. диана-ключ-значение
  2. диана-колонна
  3. диана-документ

Тип графа NoSQL не покрывается API, потому что он уже покрыт Apache Tinkerpop .

API основан на базовом модуле diana-core и определяет абстракцию общих понятий, таких как Конфигурация, Фабрика, Менеджер, Сущность и значение.

Для работы с API нам необходимо предоставить зависимость соответствующего модуля от нашего типа базы данных NoSQL.

Таким образом, для базы данных, ориентированной на документы, нам понадобится зависимость diana-document :


    org.jnosql.diana
    diana-document
    0.0.6

Аналогично, мы должны использовать модуль diana-key-value , если рабочая база данных NoSQL ориентирована на ключ-значение:


    org.jnosql.diana
    diana-key-value
    0.0.6

И, наконец, модуль diana-column , если он ориентирован на столбец:


    org.jnosql.diana
    diana-column
    0.0.6

Самые последние версии можно найти на Maven Central .

2.2. Драйвер Eclipse Nosql Diana

Драйвер представляет собой набор реализаций API для большинства

Существует одна реализация для каждой базы данных NoSQL. Если база данных является многомодельной, драйвер должен реализовать все поддерживаемые API .

Например, драйвер couchbase/| реализует как diana-document , так и diana-key-value , поскольку Couchbase ориентирован как на документ, так и на значение ключа.

В отличие от реляционных баз данных, где драйвер обычно предоставляется поставщиком базы данных, здесь драйвер предоставляется Eclipse JNoSQL . В большинстве случаев этот драйвер представляет собой оболочку вокруг официальной библиотеки поставщика.

Чтобы начать работу с драйвером, мы должны включить API и соответствующую реализацию для выбранной базы данных NoSQL.

Например, для MongoDB нам нужно включить следующие зависимости:


    org.jnosql.diana
    diana-document
    0.0.6


    org.jnosql.diana
    mongodb-driver
    0.0.6

Процесс работы с Драйвером прост.

Во-первых, нам нужен Конфигурация боб. Читая файл конфигурации из пути к классу или значений жесткого кодирования, Конфигурация может создать Фабрику. Затем мы используем его для создания Менеджера.

Наконец, Менеджер отвечает за отправку и извлечение Сущности в базу данных NoSQL и из нее .

В следующих подразделах мы объясним этот процесс для каждого типа базы данных NoSQL.

2.3. Работа С Документально-Ориентированной Базой Данных

В этом примере мы будем использовать встроенный MongoDB , так как он прост в использовании и не требует установки. Он ориентирован на документы, и следующие инструкции применимы к любой другой базе данных NoSQL, ориентированной на документы.

В самом начале мы должны предоставить все необходимые настройки, необходимые приложению для правильного взаимодействия с базой данных . В самой элементарной форме мы должны предоставить хост и порт запущенного экземпляра MongoDB.

Мы можем предоставить эти настройки либо в файле mongodb-driver.properties , расположенном на пути к классу:

#Define Host and Port
mongodb-server-host-1=localhost:27017

Или в виде жестко закодированных значений:

Map map = new HashMap<>();
map.put("mongodb-server-host-1", "localhost:27017");

Затем мы создаем Configuration bean для типа документа:

DocumentConfiguration configuration = new MongoDBDocumentConfiguration();

Из этого Конфигурации компонента мы можем создать Фабрику менеджеров :

DocumentCollectionManagerFactory managerFactory = configuration.get();

Неявно метод get() компонента Configuration использует параметры из файла свойств. Мы также можем получить эту фабрику из жестко закодированных значений:

DocumentCollectionManagerFactory managerFactory 
  = configuration.get(Settings.of(map));

Фабрика Manager имеет простой метод get(), который принимает имя базы данных в качестве параметра и создает Manager :

DocumentCollectionManager manager = managerFactory.get("my-db");

И, наконец, мы готовы. Manager предоставляет все необходимые методы для взаимодействия с базовой базой данных NoSQL через DocumentEntity.

Итак, мы могли бы, например, вставить документ:

DocumentEntity documentEntity = DocumentEntity.of("books");
documentEntity.add(Document.of("_id", "100"));
documentEntity.add(Document.of("name", "JNoSQL in Action"));
documentEntity.add(Document.of("pages", "620"));
DocumentEntity saved = manager.insert(documentEntity);

Мы также могли бы искать документы:

DocumentQuery query = select().from("books").where("_id").eq(100).build();
List entities = manager.select(query);

И аналогичным образом мы могли бы обновить существующий документ:

saved.add(Document.of("author", "baeldung"));
DocumentEntity updated = manager.update(saved);

И, наконец, мы можем удалить сохраненный документ:

DocumentDeleteQuery deleteQuery = delete().from("books").where("_id").eq("100").build();
manager.delete(deleteQuery);

Чтобы запустить образец, нам просто нужно получить доступ к модулю nosql-diana и запустить приложение Document App .

Мы должны увидеть вывод в консоли:

DefaultDocumentEntity{documents={pages=620, name=JNoSQL in Action, _id=100}, name='books'}
DefaultDocumentEntity{documents={pages=620, author=baeldung, name=JNoSQL in Action, _id=100}, name='books'}
[]

2.4. Работа С Базой Данных, Ориентированной На Столбцы

Для целей этого раздела мы будем использовать встроенную версию базы данных Cassandra , поэтому установка не требуется.

Процесс работы с базой данных, ориентированной на столбцы, очень похож. Прежде всего, мы добавляем драйвер Cassandra и API столбцов в pom:


    org.jnosql.diana
    diana-column
    0.0.6


    org.jnosql.diana
    cassandra-driver
    0.0.6

Далее нам нужны параметры конфигурации, указанные в файле конфигурации diana-cassandra.properties, в пути к классу. В качестве альтернативы мы также можем использовать жестко закодированные значения конфигурации.

Затем, используя аналогичный подход, мы создадим ColumnFamily Manager и начнем манипулировать сущностью Column:

ColumnConfiguration configuration = new CassandraConfiguration();
ColumnFamilyManagerFactory managerFactory = configuration.get();
ColumnFamilyManager entityManager = managerFactory.get("my-keySpace");

Поэтому, чтобы создать новую сущность, давайте вызовем метод insert() :

ColumnEntity columnEntity = ColumnEntity.of("books");
Column key = Columns.of("id", 10L);
Column name = Columns.of("name", "JNoSQL in Action");
columnEntity.add(key);
columnEntity.add(name);
ColumnEntity saved = entityManager.insert(columnEntity);

Чтобы запустить образец и просмотреть выходные данные в консоли, запустите приложение ColumnFamily .

2.5. Работа С Базой Данных, Ориентированной На Ключевые Ценности

В этом разделе мы будем использовать Hazelcast. Hazelcast-это база данных NoSQL, ориентированная на ключевые значения . Для получения дополнительной информации о базе данных Hazelcast вы можете проверить эту ссылку /.

Процесс работы с типом, ориентированным на ключ-значение, также аналогичен. Мы начнем с добавления этих зависимостей в pom:


    org.jnosql.diana
    diana-key-value
    0.0.6


    org.jnosql.diana
    hazelcast-driver
    0.0.6

Затем нам нужно предоставить параметры конфигурации. Затем мы можем получить Bucket Manager , а затем манипулировать сущностью Key Value:

KeyValueConfiguration configuration = new HazelcastKeyValueConfiguration();
BucketManagerFactory managerFactory = configuration.get();
BucketManager entityManager = managerFactory.getBucketManager("books");

Допустим, мы хотим сохранить следующую Книгу модель:

public class Book implements Serializable {

    private String isbn;
    private String name;
    private String author;
    private int pages;

    // standard constructor
    // standard getters and setters
}

Поэтому мы создаем экземпляр Book , а затем сохраняем его, вызывая метод put() ;

Book book = new Book(
  "12345", "JNoSQL in Action", 
  "baeldung", 420);
KeyValueEntity keyValueEntity = KeyValueEntity.of(
  book.getIsbn(), book);
entityManager.put(keyValueEntity);

Затем, чтобы получить сохраненный экземпляр Book :

Optional optionalValue = manager.get("12345");
Value value = optionalValue.get(); // or any other adequate Optional handling
Book savedBook = value.get(Book.class);

Чтобы запустить образец и просмотреть выходные данные в консоли, запустите приложение Значение ключа .

3. Уровень отображения SQL Eclipse Juno

Уровень отображения, Artemis API, представляет собой набор API, которые помогают сопоставлять аннотированные объекты java с базами данных NoSQL . Он основан на API Diana и CDI (Внедрение контекста и зависимостей).

Мы можем рассматривать этот API как JPA или ORM, как для мира NoSQL . Этот уровень также предоставляет API для каждого типа NoSQL и один базовый API для общих функций.

В этом разделе мы будем работать с документально-ориентированной базой данных MongoDB.

3.1. Необходимые зависимости

Чтобы включить Artemis в приложении, нам нужно добавить зависимость artemis-configuration . Поскольку MongoDB ориентирован на документ, также необходима зависимость artemis-document .

Для других типов баз данных NoSQL мы будем использовать artemis-column, artemis-key-value и artemis-graph .

Также необходим драйвер Diana для MongoDB:


    org.jnosql.artemis
    artemis-configuration
    0.0.6


    org.jnosql.artemis
    artemis-document
    0.0.6


    org.jnosql.diana
    mongodb-driver
    0.0.6

Artemis основана на CDI, поэтому нам также необходимо предоставить эту зависимость Maven:


    javax
    javaee-web-api
    8.0
    provided

3.2. Файл Конфигурации Документа

Конфигурация-это набор свойств для данной базы данных, которые позволяют нам устанавливать параметры вне кода. По умолчанию нам нужно указать файл nosql.json в ресурсе META-INF.

Это пример файла конфигурации:

[
    {
        "description": "The mongodb document configuration",
        "name": "document",
        "provider": "org.jnosql.diana.mongodb.document.MongoDBDocumentConfiguration",
        "settings": {
            "mongodb-server-host-1":"localhost:27019"
        }
    }
]

Нам нужно будет указать имя конфигурации выше, установив атрибут name в вашем Блоке конфигурации . Если конфигурация находится в другом файле, ее можно указать с помощью атрибута fileName .

Учитывая эту конфигурацию, мы создаем фабрику:

@Inject
@ConfigurationUnit(name = "document")
private DocumentCollectionManagerFactory managerFactory;

И с этой фабрики мы можем создать Менеджер сбора документов :

@Produces
public MongoDBDocumentCollectionManager getEntityManager() {
    return managerFactory.get("todos");
}

Менеджер Сбора документов является компонентом с поддержкой CDI и используется как в шаблоне , так и в репозитории .

3.3. Картографирование

Сопоставление – это управляемый аннотациями процесс, с помощью которого модель Entity преобразуется в значение Entity.

Давайте начнем с определения модели Todo :

@Entity
public class Todo implements Serializable {

    @Id("id")
    public long id;

    @Column
    public String name;

    @Column
    public String description;

    // standard constructor
    // standard getters and setters
}

Как показано выше, у нас есть основные аннотации сопоставления: @Entity, @Id, и @Column.

Теперь, чтобы манипулировать этой моделью, нам нужен либо Шаблон класс, либо Репозиторий интерфейс.

3.4. Работа С Шаблоном

Шаблон является мостом между моделью сущностей и API Diana . Для базы данных, ориентированной на документы, мы начинаем с введения шаблона Document bean:

@Inject
DocumentTemplate documentTemplate;

А затем мы можем манипулировать сущностью Todo . Например, мы можем создать Todo :

public Todo add(Todo todo) {
    return documentTemplate.insert(todo);
}

Или мы можем получить Todo по id :

public Todo get(String id) {
    Optional todo = documentTemplate
      .find(Todo.class, id);
    return todo.get(); // or any other proper Optional handling
}

Чтобы выбрать все сущности, мы создаем запрос Document , а затем вызываем метод select() :

public List getAll() {
    DocumentQuery query = select().from("Todo").build();
    return documentTemplate.select(query);
}

И, наконец, мы можем удалить объект Todo по id :

public void delete(String id) {
    documentTemplate.delete(Todo.class, id);
}

3.5. Работа С Репозиторием

В дополнение к классу Template мы также можем управлять сущностями через интерфейс Repository , который имеет методы для создания, обновления, удаления и извлечения информации.

Чтобы использовать интерфейс Repository , мы просто предоставляем подинтерфейс Repository:

public interface TodoRepository extends Repository {
    List findByName(String name);
    List findAll();
}

В соответствии со следующими соглашениями об именовании методов и параметров реализация этого интерфейса предоставляется во время выполнения в виде компонента CDI.

В этом примере все To do сущности с соответствующим именем извлекаются методом findByName () .

Теперь мы можем его использовать:

@Inject
TodoRepository todoRepository;

Квалификатор Database позволяет нам работать с несколькими базами данных NoSQL в одном приложении. Он поставляется с двумя атрибутами: типом и поставщиком.

Если база данных является многомодельной, то нам нужно указать, с какой моделью мы работаем:

@Inject
@Database(value = DatabaseType.DOCUMENT)
TodoRepository todoRepository;

Кроме того, если у нас есть несколько баз данных одной и той же модели, нам необходимо указать поставщика:

@Inject
@Database(value = DatabaseType.DOCUMENT, provider="org.jnosql.diana.mongodb.document.MongoDBDocumentConfiguration")
TodoRepository todoRepository;

Чтобы запустить пример, просто откройте модуль nosql-artemis и вызовите эту команду:

mvn package liberty:run

Эта команда создает, развертывает и запускает сервер Open Liberty благодаря плагину liberty-maven-plugin .

3.6. Тестирование приложения

Поскольку приложение предоставляет конечную точку REST, мы можем использовать любой клиент REST для наших тестов. Здесь мы использовали инструмент завивки.

Итак, чтобы сохранить класс Todo:

curl -d '{"id":"120", "name":"task120", "description":"Description 120"}' -H "Content-Type: application/json" -X POST http://localhost:9080/jnosql-artemis/todos

и чтобы все успеть сделать:

curl -H "Accept: application/json" -X GET http://localhost:9080/jnosql-artemis/todos

Или сделать только одно дело:

curl -H "Accept: application/json" -X GET http://localhost:9080/jnosql-artemis/todos/120

4. Заключение

В этом уроке мы изучили, как Nosql может абстрагировать взаимодействие с базой данных NoSQL.

Во-первых, мы использовали Nosql Diana API для взаимодействия с базой данных с низкоуровневым кодом. Затем мы использовали API Nosql Artemis для работы с дружественными аннотированными моделями Java .

Как обычно, мы можем найти код, используемый в этой статье на Github .