Введение в ActiveJDBC

Введение в ActiveJDBC

1. Вступление

ActiveJDBC - это легкая ORM, следующая основным идеямActiveRecord, основной ORM Ruby on Rails.

Он фокусируется наsimplifying the interaction with databases by removing the extra layer of typical persistence managers и фокусируется на использовании SQL, а не на создании нового языка запросов.

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

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

2. ActiveJDBC против других ORM

ActiveJDBC имеет серьезные различия по сравнению с большинством других Java ORM. It infers the DB schema parameters from a database, thus removing the need for mapping entities to underlying tables.с

No sessions, no persistence managers, не нужно изучать новый язык запросов, нет геттеров / сеттеров. Сама библиотека проста с точки зрения размера и количества зависимостей.

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

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

3. Принципы дизайна

  • Выводит метаданные из БД

  • Конвенциональная конфигурация

  • Нет сессий, нет «прикрепления, повторного присоединения»

  • Легкие модели, простые POJO

  • Нет проксирования

  • Предотвращение анемичной доменной модели

  • Нет необходимости в DAO и DTO

4. Настройка библиотеки

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


    org.javalite
    activejdbc
    1.4.13


    mysql
    mysql-connector-java
    5.1.34

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

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

В проекте нужно настроить плагин инструментария:


    org.javalite
    activejdbc-instrumentation
    1.4.13
    
        
            process-classes
            
                instrument
            
        
    

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

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

mvn process-classes
mvn activejdbc-instrumentation:instrument

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

5.1. Модель

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

Библиотека используетinflections английского языка для преобразования форм множественного и единственного числа существительных. Это можно изменить с помощью аннотации@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 перед любой операцией с БД.

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

Давайте посмотрим, как использовать класс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 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.

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