Тема: CRUD на Spring MVC

Нужно сделать список задач (todo-list) с возможностью просматривать список задач, добавлять новые задачи, редактировать и удалять существующие задачи.

Желательно, не использовать Spring Boot, а самому разобраться как все сконфигурировать.

Что нужно сделать:

  1. Развернуть sql скрипт
  2. 
    CREATE DATABASE  IF NOT EXISTS `todo` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
    USE `todo`;
    DROP TABLE IF EXISTS `task`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `task` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `description` varchar(100) NOT NULL,
      `status` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4;
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    LOCK TABLES `task` WRITE;
    /*!40000 ALTER TABLE `task` DISABLE KEYS */;
    INSERT  IGNORE INTO `task` VALUES (1,'aaa',1),(2,'bbb',2),(3,'ccc',0),(4,'ddd',1),(5,'eee',2),(6,'fff',0),(7,'ggg',1),(8,'hhh',2),(9,'jjj',0),(10,'kkk',1),(11,'lll',2),(12,'mmm',0),(13,'nnn',1),(14,'ooo',2),(15,'ppp',0);
    /*!40000 ALTER TABLE `task` ENABLE KEYS */;
    UNLOCK TABLES;
    
  3. Создать новый Maven проект.
  4. Добавить зависимости, которые нужны для работы с MySQL, Hibernate, Spring, Spring MVC, Thymeleaf.
  5. Добавить в проект ентити слой (пакет domain). Добавить класс Task – он будет отвечать за задачу в списке дел. Необходимые поля: description – описание задачи, status – статус выполнения задачи. В качестве статуса используй энам:
  6. 
    public enum Status {
        IN_PROGRESS,
        DONE,
        PAUSED
    }
    
  7. Добавь пакет config. В нем размести необходимые классы настройки Spring MVC приложения, работы с БД (через Hibernate) и все прочие настройки.
  8. Добавь dao слой, в котором должен быть класс TaskDAO, который будет отвечать за работу с БД. Методы, которые должны быть – CRUD и поддержка пейджинга.
  9. Добавь сервисный слой, в котором размести логику по созданию и редактированию задач.
  10. Теперь слой контроллера: в нем должны быть методы:
    • получить список задач (с учетом пейджинга)
    • добавить новую задачу
    • отредактировать существующую задачу
    • далить задачу

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

  11. Последний шаг – шаблон (html или js файл). Опционально, можно вынести стили и скрипты в разные файлы по типам. Как обычно, для бекэнд разработчика важен функционал, а не внешний вид, поэтому каким будет визуал приложенния – на твое усмотрение. У меня вышло так:

Опциональное задание:

Упаковать наше приложение в docker контейнер, добавить docker-compose файл, в котором настроить работу связки приложение-БД в docker-контейнерах.


Выполнение проекта: