Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Персистентность Java: Веб-технологии

Среди сайтов выделяют две категории:

  • Статические сайты состоят из готовых наборов HTML-страничек и не содержат программного кода на бэкенде. Например, так сделаны гайды Хекслета
  • Динамические сайты формируют свои странички на основе информации, которую разработчики и пользователи сайта добавляют в базу данных. Наглядные примеры — соцсети или почтовые сервисы

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

Что такое репозиторий

Репозиторий, специальный класс который занимается тем, что сохраняет данные объектов куда-то, обычно в базу данных. Репозитории позволят хранить данные между запросами к сайту. Но наша реализация репозиториев будет хранить данные в памяти приложения, без их сохранения в базу. Это значит, что если перезапустить приложение, то данные пропадут.

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

Посмотрим на примере, как работают репозитории:

// import org.example.hexlet.repository.CourseRepository;

// Где-то в обработчиках

// В случае курсов
var course = new Course("name", "description");
course.getId(); // null

// Во время сохранения присваиваем идентификатор id
CourseRepository.save(course);
Optional<Course> course2 = CourseRepository.find(course.getId()).get();
course.getId(); // 1

course == course2; // Это одно и тоже

CourseRepository.delete(course.getId());

// После удаления ничего не находим
CourseRepository.find(course.getId()).isEmpty(); // true

// Возвращаем список сохраненных курсов
CourseRepository.getEntities(); // List<Course>

// Ищем по началу имени
CourseRepository.search("na"); // List<Course>

// В случае пользователей все то же самое
var user = new User("Mike", "mike@email.com");
UserRepository.save(user);
UserRepository.delete(user.getId());
UserRepository.getEntities(); // List<User>

У этого класса есть несколько статических методов для сохранения и извлечения объектов. Этого достаточно для наших задач.

Ниже мы приводим исходный код класса CourseRepository для тех, кому интересно:

package org.example.hexlet.repository;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import org.example.hexlet.model.Course;

public class CourseRepository {
    // Тип зависит от того, с какой сущностью идет работа в упражнении
    private static List<Course> entities = new ArrayList<Course>();

    public static void save(Course course) {
        // Формируется идентификатор
        course.setId((long) entities.size() + 1);
        entities.add(course);
    }

    public static List<Course> search(String term) {
        var courses = entities.stream()
                .filter(entity -> entity.getName().startsWith(term))
                .toList();
        return courses;
    }

    public static Optional<Course> find(Long id) {
        var course = entities.stream()
                .filter(entity -> entity.getId().equals(id))
                .findAny();
        return course;
    }

    public static List<Course> getEntities() {
        return entities;
    }
}

Точно такой же класс мы создадим под каждую сущность, с которой будем работать.


Самостоятельная работа

  1. Откройте наш демонстрационный проект
  2. Изучите в нем примеры классов репозиториев, которые помогают для работы с данными

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

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

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 2 мая

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»