<p>В предыдущем домашнем задании мы вручную формировали запросы в базу данных при помощи JDBC. В этом домашнем задании мы будем использовать ORM</p>
<h2>Ссылки</h2>
<ul>
<lidata-marpit-fragment="1"><ahref="https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html">Интерфейс CrudRepository – обеспечивает основные операции по поиску, сохранению и удалению данных</a></li>
<lidata-marpit-fragment="2"><ahref="https://docs.oracle.com/javaee/7/api/javax/persistence/Entity.html">Аннотация @Entity – отмечает, что класс является моделью</a></li>
<lidata-marpit-fragment="3"><ahref="https://projectlombok.org/features/GetterSetter">Аннотации @Getter и @Setter для автоматической генерации геттеров и сеттеров</a></li>
<lidata-marpit-fragment="4"><ahref="https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/package-summary.html">Аннотации для привязки запросов к методам контроллера</a></li>
<lidata-marpit-fragment="5"><ahref="https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestBody.html">Аннотация @RequestBody – привязывает параметр метода к телу запроса</a></li>
<lidata-marpit-fragment="6"><ahref="https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/PathVariable.html">Аннотация @PathVariable – привязывает параметр метода к значению плейсхолдера</a></li>
</ul>
<h2>src/main/java/exercise/model/Person.java</h2>
<h2>Задачи</h2>
<ul>
<lidata-marpit-fragment="7">Допишите модель <code>Person</code>. Добавьте в модель приватные поля <code>firstName</code> и <code>lastName</code> с типом <code>String</code>, а также геттеры и сеттеры для всех полей класса. Не забудьте поставить нужную аннотацию, чтобы класс расценивался как модель.</li>
</ul>
<h2>build.gradle</h2>
<p>В прошлом упражнении мы писали файл миграции руками. Liquibase умеет автоматически генерировать файл миграции на основании моделей, для этого нужно подключить зависимости и настроить Liquibase.</p>
<h2>Задачи</h2>
<ul>
<lidata-marpit-fragment="8">
<p>Изучите файл <em>build.gradle</em>, обратите внимание на комментарии</p>
</li>
<lidata-marpit-fragment="9">
<p>При помощи команды <code>make generate-migrations</code> сгенерируйте файл миграции. Изучите получившийся файл</p>
<lidata-marpit-fragment="10">Изучите класс репозитория. Обратите внимание, что он наследуется от класса <code>CrudRepository</code>, благодаря чему в нём уже есть различные методы для работы с данными</li>
<lidata-marpit-fragment="11">Часть методов для работы с сущностью уже написаны в контроллере. Изучите их код, посмотрите, как происходит работа с репозиторием. Данные в теле запроса приходят в виде JSON следующего вида:</li>
<p>Допишите метод, который обрабатывает POST-запросы по пути <em>/people</em> и добавляет новую сущность в базу данных. Чтобы привязать параметр метода к телу запроса, используйте аннотацию <code>@RequestBody</code></p>
</li>
<lidata-marpit-fragment="13">
<p>Допишите метод, который обрабатывает DELETE-запросы по пути <em>/people/{id}</em> и удаляет сущность из базы. Чтобы получить id сущности из пути, используйте аннотацию <code>@PathVariable</code></p>
</li>
<lidata-marpit-fragment="14">
<p>Допишите метод, который обрабатывает PATCH-запросы по пути <em>/people/{id}</em> и обновляет данные сущности.</p>
</li>
</ul>
<h2>Подсказки</h2>
<ul>
<lidata-marpit-fragment="15">
<p>Обратите внимание, что в классе модели импортирована библиотека Lombok. Вы можете использовать её аннотации, чтобы не писать геттеры и сеттеры вручную</p>
</li>
<lidata-marpit-fragment="16">
<p>Метод <ahref="https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html#save-S-">save()</a> не только добавляет новую сущность в базу, но и обновляет данные уже существующей</p>
</li>
<lidata-marpit-fragment="17">
<p>Чтобы обновить сущность при помощи метода <code>save()</code>, потребуется установить её id. Для этого вам понадобится написанный сеттер</p>