ДЗ
Приложение, позволяющее вести каталог книг в библиотеке.
-------------------------Описание домашнего задания-------------------------
### Задание:
Разработать однопользовательское, консольное приложение позволяющее вести каталог книг в библиотеке. Каждая книга имеет автора и как минимум один жанр (в зависимости от выбранной сложности работы). Задание выполняется на базе заготовки, содержащей каркас приложения. Необходимо "дописать" классы и служебные файлы заготовки, ориентируясь на оставленные в ней подсказки так, чтобы выполнялись условия задания. Также решение должно удовлетворять нижеуказанным требованиям.
### Требования к использованию заготовки:
- То, что уже было в заготовке, должно остаться неизменным (количество, имена и текущее содержимое классов и файлов, сигнатуры методов и т.д.)
- Можно добавлять код/текст в существующие методы классов и файлы, писать свои приватные методы, а также создавать новые классы
- Вышеуказанные требования не относятся к комментариям, их после реализации нужно удалить
### Требования к реализации:
- Использовать Spring JDBC и реляционную базу H2
- Для параметризованных запросов использовать NamedParametersJdbcTemplate
- Каждая сущность должна храниться в своей таблице
- Отношение между книгой и автором - многие-к-одному (у книги один автор, но у автора может быть несколько книг)
- Отношение между книгой и жанром зависит от выбранной сложности работы. Многие-к-одному (у книги один жанр, но у жанра может быть несколько книг) или многие-ко-многим (у книги много жанров, и у жанра может быть несколько книг)
- Интерфейс выполняется на Spring Shell. Для сущности книги, предусмотреть операции создания, обновления, удаления, вывода всех книг, а также вывода книги по id
- Предусмотреть операции вывода полного списка сущностей авторов и жанров
- Создание и инициализация схемы БД должно происходить через schema.sql + data.sql
- Не делать абстрактных или обобщенных сущностей
- Не делать абстрактных или обобщенных Dao
- Не делать двунаправленных связей (в книге автор, в авторе книги)
- Проблема N+1 должна быть решена
- С помощью @JdbcTest сделать интеграционные тесты всех методов дао жанров (со встроенной БД)
- Без фанатизма)
### Опционально:
- Создание и инициализация схемы БД сделать через систему миграций (Liquibase/Flyway)
- Отношение книга-жанр, многие-ко-многим (должен использоваться соответствующий вариант заготовки)
Заготовка для выполнения работы:
- Базовый вариант: [https://github.com/OtusTeam/Spring/tree/master/templates/hw05-jdbc-simple](https://github.com/OtusTeam/Spring/tree/master/templates/hw05-jdbc-simple)
- Вариант с опциональным усложнением: [https://github.com/OtusTeam/Spring/tree/master/templates/hw05-jdbc-hard](https://github.com/OtusTeam/Spring/tree/master/templates/hw05-jdbc-hard)
Задание сдаётся в виде ссылки на pull-request в чат с преподавателем в личном кабинете ОТУС, а не в Telegram
В pull-request должно присутствовать только то что касается текущей работы. Временные файлы и файлы IDE не должны попадать в PR.
Инструкция по работе с pull-request-ами находится в документе "Настройка окружения.pdf" в материалах занятия.
Вопросы можно задавать в чате ДЗ, но для оперативности рекомендуем делать это в группе Telegram.
Код, написанный в данном ДЗ будет использоваться в дальнейших домашних заданиях всех оставшихся блоков курса