Статьи

Java 8: До свидания SQL, привет скорости!

Большинство приложений, написанных на Java, требуют некоторой формы хранения данных. В небольших приложениях это часто реализуется с использованием примитивного JDBC-соединения, которое запрашивается с помощью обычного SQL. Более крупные системы, с другой стороны, часто используют инфраструктуры объектно-реляционного сопоставления (ORM) для управления связью с базой данных. У обоих этих подходов есть свои «за» и «против», но оба они, как правило, включают в себя написание большого количества стандартного кода, который выглядит более или менее одинаковым для каждой кодовой базы. В этой статье я продемонстрирую другой подход к простому взаимодействию с базой данных с использованием проекта с открытым исходным кодом, который называется Speedment .

Что такое ускорение?

Speedment — это инструмент разработчика, который генерирует классы Java из ваших метаданных SQL. Сгенерированный код обрабатывает все: от настройки соединения до извлечения и сохранения данных. Система разработана для идеальной интеграции с Java 8 Stream API, так что вы можете запрашивать вашу базу данных, используя лямбда-выражения без единой строки SQL. Созданные потоки оптимизируются в фоновом режиме, чтобы уменьшить нагрузку на сеть.

Настройка проекта

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

01
02
03
04
05
06
07
08
09
10
CREATE DATABASE hellospeedment;
USE hellospeedment;
 
CREATE TABLE IF NOT EXISTS `user` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT,
    `name` varchar(32) NOT NULL,
    `age` int(5) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

Далее мы создадим наш проект Java. Запустите вашу любимую среду разработки и создайте новый проект Maven от Archetype. Архетипы — это шаблоны проектов, которые можно использовать для быстрого определения новых проектов Maven. То, как они используются, различается в разных IDE. Следующая информация должна быть введена:

вместилище https://repo1.maven.org/maven2
GroupID com.speedment
артефакта speedment-архетип-MySQL
Версия 2.3.0

Подобные архетипы доступны и для PostgreSQL и MariaDB .

В NetBeans архетип обычно находится среди тех, которые по умолчанию индексируются из центрального репозитория Maven. Когда проект создан, у вас должно быть что-то вроде этого:

новый проект

Запуск пользовательского интерфейса Speedment

Теперь, когда проект создан, пришло время запустить интерфейс пользователя Speedment. Это сделано, выполняя ускорение: цель gui-maven. В NetBeans и IntelliJ IDEA список доступных целей maven можно найти в среде IDE. В Netbeans это находится в окне навигатора (часто расположенном в левом нижнем углу экрана). Корневой узел проекта должен быть выбран для отображения целей. В IntelliJ цели можно найти в «Maven Projects» — вкладке в правом углу экрана. Вам может понадобиться развернуть узлы «Имя проекта», «Плагины» и «speedment-maven-plugin», чтобы найти его. Насколько мне известно, в « Затмении» у вас нет списка целей. Вместо этого вам придется определить цель вручную. Для этого есть руководство по Speedment GitHub wiki .

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

подключения

Диалог подключения позволит вам выбирать только те базы данных, к которым вы можете подключиться с помощью загруженных JDBC-драйверов. Если вы, например, хотите использовать базу данных PostgreSQL, вам следует добавить драйвер PostgreSQL в тег <dependencies> раздела speedment-maven-plugin в файле pom.xml и повторно запустить пользовательский интерфейс.

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

главный экран

В этом случае мы просто нажмем кнопку «Создать» на панели инструментов, чтобы сгенерировать проект с использованием настроек по умолчанию. Теперь мы можем закрыть пользовательский интерфейс и вернуться в нашу IDE.

Написать заявку

Теперь, когда Speedment сгенерировал весь стандартный код, необходимый для связи с базой данных HelloSpeedment, мы можем сосредоточиться на написании реального приложения. Давайте откроем файл Main.java, созданный архетипом maven, и изменим метод main ().

1
2
3
4
5
6
7
public class Main {
    public static void main(String... params) {
        Speedment speedment = new HellospeedmentApplication()
            .withPassword("secret").build();
        Manager<User> users = speedment.managerOf(User.class);
    }
}

В Speedment приложение определяется с использованием шаблона компоновщика. Конфигурирование во время выполнения может быть выполнено с использованием различных методов withXXX (), и платформа вызывается при вызове метода build (). В этом случае мы используем это для установки пароля MySQL. Speedment никогда не будет хранить конфиденциальную информацию, такую ​​как пароли вашей базы данных, в файлах конфигурации, поэтому вам придется либо иметь незащищенную базу данных, либо устанавливать пароль во время выполнения.

Следующее, что мы хотим сделать, это прослушать ввод пользователя. Когда пользователь запускает программу, мы должны приветствовать его, а затем спрашивать его имя и возраст. Затем мы должны сохранить информацию о пользователе в базе данных.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
final Scanner scn = new Scanner(System.in);
 
System.out.print("What is your name? ");
final String name = scn.nextLine();
 
System.out.print("What is your age? ");
final int age = scn.nextInt();
 
try {
    users.newEmptyEntity()
        .setName(name)
        .setAge(age)
        .persist();
} catch (SpeedmentException ex) {
    System.out.println("That name was already taken.");
}

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

Чтение сохраненных данных

Помните, я начал с того, что рассказал, как Speedment хорошо вписывается в Stream API в Java 8? Давайте попробуем это! Если мы запустим указанное выше приложение несколько раз, мы можем заполнить базу данных несколькими пользователями. Затем мы можем запросить базу данных, используя тот же менеджер пользователей.

1
2
3
4
5
6
System.out.println(
    users.stream()
        .filter(User.ID.lessThan(100))
        .map(User::toJson)
        .collect(joining(",\n    ", "[\n    ", "\n]"))
);

Это даст результат примерно так:

1
2
3
4
5
6
7
[
    {"id":1,"name":"Adam","age":24},
    {"id":2,"name":"Bert","age":20},
    {"id":3,"name":"Carl","age":35},
    {"id":4,"name":"Dave","age":41},
    {"id":5,"name":"Eric","age":18}
]

Резюме

В этой статье показано, как легко писать приложения для баз данных, используя Speedment . Мы создали проект с использованием архетипа maven, запустили пользовательский интерфейс Speedment в качестве цели maven, установили соединение с локальной базой данных и сгенерировали код приложения. Затем нам удалось выполнить как сохранение данных, так и запросы без единой строки SQL!

Это было все для этого времени.

PS: Speedment 2.3 Hamilton был выпущен на днях и содержит массу действительно интересных функций, позволяющих вам манипулировать генератором кода в соответствии с вашими потребностями. Проверьте это!

Ссылка: Java 8: До свидания SQL, привет скорости! от нашего партнера JCG Эмиля Форслунда из блога Age of Java .