«1. Введение

ActiveJDBC — это облегченная ORM, основанная на основных идеях ActiveRecord, основной ORM для Ruby on Rails.

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

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

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

2. ActiveJDBC и другие ORM

ActiveJDBC сильно отличается от большинства других ORM Java. Он выводит параметры схемы БД из базы данных, тем самым устраняя необходимость сопоставления сущностей с базовыми таблицами.

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

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

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

3. Принципы проектирования

    Получает метаданные из конфигурации БД на основе соглашений Без сеансов, без «присоединения, повторного подключения» Облегченные модели, простые POJO Без проксирования Избегание анемичной модели домена Нет необходимости в DAO и DTO ~~ ~ 4. Настройка библиотеки

Типичная настройка Maven для работы с базой данных MySQL включает в себя:

Последнюю версию артефактов коннектора activejdbc и mysql можно найти в центральном репозитории Maven.

<dependency>
    <groupId>org.javalite</groupId>
    <artifactId>activejdbc</artifactId>
    <version>1.4.13</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.34</version>
</dependency>

Инструментарий — это цена упрощения, необходимая при работе с проектами ActiveJDBC.

В проекте необходимо настроить инструментальный плагин:

Последний плагин activejdbc-instrumentation также можно найти в Maven Central.

<plugin>
    <groupId>org.javalite</groupId>
    <artifactId>activejdbc-instrumentation</artifactId>
    <version>1.4.13</version>
    <executions>
        <execution>
            <phase>process-classes</phase>
            <goals>
                <goal>instrument</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Теперь мы можем обработать инструментирование, выполнив одну из этих двух команд:

5. Использование ActiveJDBC

mvn process-classes
mvn activejdbc-instrumentation:instrument

5.1. Модель

Мы можем создать простую модель с помощью всего одной строки кода — она включает в себя расширение класса Model.

Библиотека использует флексии английского языка для преобразования форм множественного и единственного числа существительных. Это можно переопределить с помощью аннотации @Table.

Давайте посмотрим, как выглядит простая модель:

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

import org.javalite.activejdbc.Model;

public class Employee extends Model {}

Два класса — Base и DB — предназначены для подключения к базам данных.

Самый простой способ подключения к базе данных:

Когда модели работают, они используют соединение, найденное в текущем потоке. Это соединение помещается в локальный поток классом Base или DB перед любой операцией DB.

Base.open("com.mysql.jdbc.Driver", "jdbc:mysql://host/organization", "user", "xxxxx");

Вышеупомянутый подход позволяет использовать более краткий API, устраняя необходимость в менеджерах сеансов БД или постоянства, как в других ORM Java.

Давайте посмотрим, как использовать класс DB для подключения к базе данных:

Если мы посмотрим, насколько по-разному используются Base и DB для подключения к базам данных, это поможет нам сделать вывод, что Base следует использовать при работе. в одной базе данных, а БД следует использовать с несколькими базами данных.

new DB("default").open(
  "com.mysql.jdbc.Driver", 
  "jdbc:mysql://localhost/dbname", 
  "root", 
  "XXXXXX");

5.3. Вставка записи

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

В качестве альтернативы мы можем добавить ту же запись следующим образом:

Employee e = new Employee();
e.set("first_name", "Hugo");
e.set("last_name", "Choi");
e.saveIt();

Или даже бегло:

Employee employee = new Employee("Hugo","Choi");
employee.saveIt();

5.4. Обновление записи

new Employee()
 .set("first_name", "Hugo", "last_name", "Choi")
 .saveIt();

Фрагмент ниже показывает, как обновить запись:

5.5. Удаление записи

Employee employee = Employee.findFirst("first_name = ?", "Hugo");
employee
  .set("last_name","Choi")
  .saveIt();

Если необходимо удалить все записи:

Employee e = Employee.findFirst("first_name = ?", "Hugo");
e.delete();

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

Employee.deleteAll();

5.6. Извлечение записи

Employee employee = Employee.findFirst("first_name = ?","Hugo");
employee.deleteCascade();

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

Если мы хотим получить несколько записей, мы можем использовать метод where:

Employee e = Employee.findFirst("first_name = ?", "Hugo");

6. Поддержка транзакций

List<Employee> employees = Employee.where("first_name = ?", "Hugo");

«В Java ORM существует явное соединение или объект-менеджер (EntityManager в JPA, SessionManager в Hibernate и т. д.). В ActiveJDBC такого нет.

Вызов Base.open() открывает соединение, прикрепляет его к текущему потоку и, таким образом, все последующие методы всех моделей повторно используют это соединение. Вызов Base.close() закрывает соединение и удаляет его из текущего потока.

Для управления транзакциями есть несколько вспомогательных вызовов:

Запуск транзакции:

Подтверждение транзакции:

Base.openTransaction();

Откат транзакции:

Base.commitTransaction();

7. Поддерживаемые базы данных

Base.rollbackTransaction();

Последняя версия поддерживает такие базы данных, как SQLServer, MySQL, Oracle, PostgreSQL, H2, SQLite3, DB2.

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

В этом кратком руководстве мы сосредоточились на самых основах ActiveJDBC и изучили их.

Как всегда, исходный код, относящийся к этой статье, можно найти на Github.

«