Для удобства работы над проектом следует придерживаться следующей структуры:
- src // Исходный код
\
|- test // Тесты
|- main // Основной код
\
|- resources // Код с ресурсами
\
|- application.properties // Параметры с основными настройками приложения
|- java.com.ues.crm_backend // Код на java
\
|- Config // Файлы конфигураций
\
|- CorsConfig // Файл с конфигурацией CORS
|- Controllers // Файлы контроллеров
\
|- CompanyController.java // Класс с эндпоинтами для таблицы Company
|- ContactPersonController.java // Класс с эндпоинтами для таблицы ContactPerson
|- ...
|- DataBase // Файлы для взаимодействия с БД
\
|- Repositories // Репозитории для взаимодействия с БД из контроллеров
\
|- CompanyRepository.java // Класс с основными методами для взаимодействия с таблицей Company
|- ...
|- Interfaces // Интерфейсы для выполнения SQL запросов в БД
\
|- ICompanyRepository.java // Интерфейс для совершения SQL запросов к таблице Company
|- ...
|- Models // Файлы моделей
\
|- Company // Файлы моделей для таблицы Company
\
|- Company.java // Стандартная версия модели Company
|- SerializedCompany.java // Сериализуемая версия модели Company (может отсутствовать. См. раздел "костыли")
|- ContactPerson // Файлы моделей для таблицы ContactPerson
|- ...
Здесь описан наиболее общий шаблон работы программиста на стороне backend'а. Некоторые шаги могут быть пропущены.
Если в таблице используются только стандартные типы (String, Number, Boolean, Char, Data и некоторые другие), то можно создать один класс модели (ModelName.java).
Конвертация из строк таблицы в объект класса (и наоборот) осуществляется через библиотеку JpaRepository. Это означает, что все поля должны быть сопрежены со столбцами из таблицы с помощью анотаций.
Если в таблице используются неконвертируемые для ORM типы (массивы, списки и т.д.), то при попытке поместить их в БД будет выброшена ошибка. Чтобы этого избежать, создаётся промежуточный сериализируемый класс, содержащий в себе только понятные для ORM типы.
В итоге получается, что есть "стандартная" модель ModelName.java, содержащая в себе все поля в таком виде, что их удобно использовать в коде, а есть "сериализируемая" версия SerializedModelName.java для нормальной конвертации ORM (аннотациями помечается только она).
P.S. Если ничего не понятно, то дочитайте инструкцию до конца - возможно станет лучше.
В директории Interfaces создаётся новый интерфейс, унаследованный от JpaRepository<Класс_конвертируемого_объекта, Тип_PK> В теле интерфейса описываются все пользовательские запросы к БД на языке SQL.
На этом этапе ORM уже можно использовать. Для этого создаётся экземпляр интерфейса, который обрабатывает все запросы и автоматически производит конфертацию строк из БД в POJO и наоборот.
В директории Repositories создаётся класс, содержащий в себе все основные методы взаимодействия с БД. Это делается для разделения логики обработки эндпоинтов и реализации базы.
В директории Controllers создаётся класс контроллера, содержащий в себе методы для обработки эндпоинтов. Вся маршрутизация обрабатывается через springframework, настраиваемый через аннотации.
Конфигурация БД и сервера указывается в файле application.properties.
Конфигурация CORS указывается в CorsConfig.java.
Пример для POST запроса:
POST Запрос Вызов метода SQL запрос return return return
Участник: Frontend -----> Controller -----> Repository -----> ORM_Interface -----> Repository -----> Controller -----> Frontend
Оперируемый тип: POST c JSON ----> POJO -----> SerializedPOJO -> SQL строка -----> Ответ от БД ----> Ответ от БД ----> Ответ от сервера
На данный момент сервер стартуется из IDE. Для этого необходимо запустить метод main.