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

Начало работы с jOO

Узнайте, как настроить и создать простое приложение CRUD с помощью фреймворка jOO.

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

1. Введение

В этом учебнике, мы собираемся взять быстрый тур работает приложение с jOO’ (Ориентированный на объект Java запрос). Эта библиотека генерирует классы Java на основе таблиц баз данных и позволяет нам создавать запросы, безопасные для типов, с помощью свободного API.

Мы охватим всю настройку, подключение к базе данных PostgreS’L и несколько примеров операций CRUD.

2. Мейвен зависимостей

Для библиотеки jOO нам понадобится следующий три зависимости jOO :


    org.jooq
    jooq
    3.13.4


    org.jooq
    jooq-meta
    3.13.4


    org.jooq
    jooq-codegen
    3.13.4

Нам также понадобится одна зависимость для ПостгреСЗЛ водитель :


    org.postgresql
    postgresql
    42.2.16

3. Структура базы данных

Прежде чем мы начнем, давайте создадим простую схему DB для наших примеров. Мы будем использовать простую Автор и Статья связь:

create table AUTHOR
(
    ID         integer PRIMARY KEY,
    FIRST_NAME varchar(255),
    LAST_NAME  varchar(255),
    AGE        integer
);

create table ARTICLE
(
    ID          integer PRIMARY KEY,
    TITLE       varchar(255) not null,
    DESCRIPTION varchar(255),
    AUTHOR_ID   integer
        CONSTRAINT fk_author_id REFERENCES AUTHOR
);

4. Подключение к базе данных

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

Во-первых, мы должны предоставить пользователю, пароль, и полный URL в базу данных. Мы будем использовать эти свойства для создания Связь объект с помощью ВодительManager и его getConnection метод:

String userName = "user";
String password = "pass";
String url = "jdbc:postgresql://db_host:5432/baeldung";
Connection conn = DriverManager.getConnection(url, userName, password);

Далее нам нужно создать экземпляр DSLContext . Этот объект будет нашей точкой входа для интерфейсов jOO:

DSLContext context = DSL.using(conn, SQLDialect.POSTGRES);

В нашем случае, мы проходят мимо ПОСТГРЕС диалект, но Есть несколько других доступных, как H2, MyS’L, S’Lite, и многое другое.

5. Поколение кода

Для создания классов Java для наших таблиц баз данных нам потребуется следующее jooq-config.xml файл:



    
    
        org.postgresql.Driver
        jdbc:postgresql://db_url:5432/baeldung_database
        username
        password
    

    
        org.jooq.codegen.JavaGenerator

        
            org.jooq.meta.postgres.PostgresDatabase
            public
            .*
            
        

        
            com.baeldung.jooq.model
            C:/projects/baeldung/tutorials/jooq-examples/src/main/java
        
    

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

Для выполнения инструмента генерации кода jOO нам необходимо выполнить следующий код:

GenerationTool.generate(
  Files.readString(
    Path.of("jooq-config.xml")
  )    
);

После завершения генерации мы получим два следующих класса, каждый из которых соответствует таблице баз данных:

com.baeldung.model.generated.tables.Article;
com.baeldung.model.generated.tables.Author;

6. ОПЕРАЦИИ CRUD

Теперь давайте рассмотрим несколько основных операций CRUD, которые мы можем выполнить с библиотекой jOO.

6.1. Создание

Во-первых, давайте создадим новую Статья запись. Для этого нам необходимо ссылаться на newРекорд метод с надлежащей ссылкой таблицы в качестве параметра:

ArticleRecord article = context.newRecord(Article.ARTICLE);

Статья.ARTICLE переменная является справочным экземпляром к СТАТЬЯ таблицы баз данных. Он был автоматически создан jOO во время генерации кода.

Далее мы можем установить значения для всех необходимых свойств:

article.setId(2);
article.setTitle("jOOQ examples");
article.setDescription("A few examples of jOOQ CRUD operations");
article.setAuthorId(1);

Наконец, мы должны ссылаться на магазин метод записи, чтобы сохранить его в базе данных:

article.store();

6.2. Чтение

Теперь давайте посмотрим, как мы можем читать значения из базы данных. В качестве примера выберите всех авторов:

Result authors = context.select()
  .from(Author.AUTHOR)
  .fetch();

Вот, мы используем выбрать метод в сочетании с из положение, указывая, из какой таблицы мы хотим прочитать. Ссылаясь на принести метод выполняет запрос S’L и возвращает полученный результат.

Результат объект реализует Итерируемые интерфейс, так что легко итерировать над каждым элементом. И имея доступ к одной записи, мы можем получить ее параметры с помощью getValue метод с надлежащей ссылкой на поле:

authors.forEach(author -> {
    Integer id = author.getValue(Author.AUTHOR.ID);
    String firstName = author.getValue(Author.AUTHOR.FIRST_NAME);
    String lastName = author.getValue(Author.AUTHOR.LAST_NAME);
    Integer age = author.getValue(Author.AUTHOR.AGE);

    System.out.printf("Author %s %s has id: %d and age: %d%n", firstName, lastName, id, age);
});

Мы можем ограничить выбранный запрос набором конкретных полей. Давайте принесем только статьи идентификаторы и названия:

Result> articles = context.select(Article.ARTICLE.ID, Article.ARTICLE.TITLE)
  .from(Author.AUTHOR)
  .fetch();

Мы также можем выбрать один объект с fetchOne метод. Параметры для этого являются ссылкой на таблицу и условием, чтобы соответствовать надлежащей записи.

В нашем случае, давайте просто выбрать Автор с идентификатором, равным 1:

AuthorRecord author = context.fetchOne(Author.AUTHOR, Author.AUTHOR.ID.eq(1))

Если нет записи соответствует условию, fetchOne метод вернет нулевой .

6.3. Обновление

Чтобы обновить данный отчет, мы можем использовать обновление метод из DSLContext объект в сочетании с установить вызовы метода для каждой области, которую мы должны изменить. За этими заявлениями должен последовать где положение с надлежащим условием матча:

context.update(Author.AUTHOR)
  .set(Author.AUTHOR.FIRST_NAME, "David")
  .set(Author.AUTHOR.LAST_NAME, "Brown")
  .where(Author.AUTHOR.ID.eq(1))
  .execute();

Запрос обновления будет работать только после того, как мы позвоним выполнить метод. В качестве возврата мы получим интегратор, равный количеству обновленных записей.

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

ArticleRecord article = context.fetchOne(Article.ARTICLE, Article.ARTICLE.ID.eq(1));
article.setTitle("A New Article Title");
article.store();

магазин метод вернет 1 если операция прошла успешно или 0 если обновление не было необходимым. Например, ничто не соответствовало условию.

6.4. Удаление

Чтобы удалить данный отчет, мы можем использовать удалить метод из DSLContext объект. Условие удаления должно быть передано в качестве параметра в следующем где статья:

context.delete(Article.ARTICLE)
  .where(Article.ARTICLE.ID.eq(1))
  .execute();

Запрос на удаление будет запущен только после того, как мы позвоним выполнить метод. В качестве возврата мы получим интегратор, равный количеству удаленных записей.

Кроме того, можно удалить уже принес запись, выполняя свои удалить метод:

ArticleRecord articleRecord = context.fetchOne(Article.ARTICLE, Article.ARTICLE.ID.eq(1));
articleRecord.delete();

удалить метод вернет 1 если операция прошла успешно или 0 если удаление не является необходимым. Например, когда ничего не соответствовало условию.

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

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