Статьи

Java 8: используйте Smart Streams с вашей базой данных за 2 минуты

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

Когда наконец-то появилась Java 8, некоторые колледжи и я начали проект с открытым исходным кодом, чтобы продвинуть всю проблему Java / DB на один шаг вперед, используя библиотеку потоков Java 8, чтобы таблицы базы данных можно было рассматривать как чистые потоки Java 8. Speedment родился! Вау, теперь мы можем создавать типобезопасные приложения баз данных без необходимости писать SQL-код. В древние 90-е годы нам, разработчикам Java, приходилось бороться за то, чтобы наше приложение базы данных работало должным образом. Было много кодирования, отладки и настройки. Тем не менее, приложения часто взрываются прямо на наших лицах для нашей все возрастающей агонии. Вещи постепенно улучшались с течением времени с улучшенным языком, JDBC и поддержкой структуры. Я хотел бы думать, что мы, разработчики, также улучшили, но есть разные мнения на этот счет …

Герцог и Шпили картографических потоков.

Герцог и Шпили картографических потоков.

Speedment подключается к существующим базам данных и генерирует код Java. Затем мы можем использовать сгенерированный код для удобного запроса к базе данных, используя стандартные потоки Java 8. С новой версией 2.3, появившейся на прилавках совсем недавно, мы можем даже выполнять параллельные потоки запросов!

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

01
02
03
04
05
06
07
08
09
10
11
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(45) NOT NULL,
  `firstName` varchar(45) DEFAULT NULL,
  `lastName` varchar(45) DEFAULT NULL,
  `email` varchar(45) NOT NULL,
  `password` varchar(45) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email_UNIQUE` (`email`),
  UNIQUE KEY `username_UNIQUE` (`username`)
) ENGINE=InnoDB;

Ускорение бесплатно для баз данных с открытым исходным кодом MySQL, PostgreSQL и MariaDB. Существует также поддержка коммерческих баз данных, таких как Oracle, в качестве дополнительной функции для предприятий.

Примеры

Запросы

Выберите всех пользователей с почтовым адресом «.com» и распечатайте их:

1
2
3
users.stream()
            .filter(EMAIL.endsWith(".com"))
            .forEach(System.out::println);

Выберите пользователей, чье имя — «Адам» или «Сесилия», и отсортируйте их по порядку имен пользователей, затем возьмите первые 10 из них, извлеките адрес электронной почты и распечатайте его.

1
2
3
4
5
6
users.stream()
            .filter(FIRST_NAME.in("Adam", "Cecilia"))
            .sorted(USERNAME.comparator())
            .limit(10)
            .map(User::getEmail)
            .forEach(System.out::println);

Создание контента базы данных

Создайте нового пользователя и сохраните его в базе данных:

1
2
3
4
5
users.newEmptyEntity()
            .setUsername("thorshammer")
            .setEmail("[email protected]")
            .setPassword("uE8%3KwB0!")
            .persist();

Обновление содержимого базы данных

Найдите пользователя с id = 10 и обновите пароль:

1
2
3
4
users.stream()
            .filter(ID.equal(10))
            .map(u -> u.setPassword("pA6#nLaX1Z"))
            .forEach(User::update);

Удаление содержимого базы данных

Удалить пользователя с id = 100:

1
2
3
users.stream()
            .filter(ID.equal(100))
            .forEach(User::remove);

Новый классный материал: параллельные запросы

Сделать какую-то дорогую операцию
параллельно для пользователей с 10_000 <= id <20_000

1
2
3
4
users.stream()
            .parallel()
            .filter(ID.between(10_000, 20_000))
            .forEach(expensiveOperation());

Настроить

Настройте код для примеров выше:

1
2
3
4
5
final Speedment speedment = new JavapotApplication()
            .withPassword("javapot") // Replace with your real DB password
            .build();
 
        final Manager<User> users = speedment.managerOf(User.class);

Начни с ускорения

Читайте больше на GitHub о том, как начать работу с Speedment.