Перейти к основному содержимому

Введение в ActiveJDBC

· 5 мин. чтения

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 включает в себя:

<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 и mysql можно найти в репозитории Maven Central.

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

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

<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>

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

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

mvn process-classes
mvn activejdbc-instrumentation:instrument

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

5.1. Модель

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

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

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

import org.javalite.activejdbc.Model;

public class Employee extends Model {}

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

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

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

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

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

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

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

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

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

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();

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

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

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

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

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

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

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

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

Employee.deleteAll();

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

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

5.6. Получение записи

Возьмем одну запись из базы данных:

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

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

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

6. Сопровождение сделки

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

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

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

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

Base.openTransaction();

Совершение транзакции:

Base.commitTransaction();

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

Base.rollbackTransaction();

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

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

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

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

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