Содержание:
- Введение
- Требования к установке
- Начало работы
- Структура проекта
- Модели и БД
- Вызовы API
- Расширенный вызов
- Исключения
- Заключение
- Автор
Spring-jpa-crud — это простой проект шаблона, который демонстрирует, как использовать Spring Boot и JPA для создания веб-приложения CRUD (создание, чтение, обновление, удаление). Проект построен с использованием Maven и использует PostgreSQL для хранения данных.
Инструменты и среды:
- JDK 11 или более поздней версии
- PostgreSQL (например, PgAdmin)
- Postman
- IntelliJ Idea Ultimate Версия
-
Откройте Git Commander или любое другое окно Commander, которое используется по умолчанию в вашей ОС (cmd в Windows, Terminal в Mac). Все дальнейшие примеры будут показаны для Windows. Если вы работаете на Mac, вы всегда можете поискать альтернативные команды для Mac в Интернете.
-
Перейдите в директорий, в котором вы хотите разместить этот проект.
C:\Users\ThinkPad>cd desktop
- Напишите следующую команду в коммандной строке следующим образом:
C:\Users\ThinkPad\Desktop>git clone https://github.com/naraomur/spring-jpa-crud.git
если вы получили следующий ответ, вы готовы к работе!
Cloning into 'spring-jpa-crud'...
remote: Enumerating objects: 149, done.
remote: Counting objects: 100% (149/149), done.
remote: Compressing objects: 100% (89/89), done.
Receiving objects: 69% (103/149) 149 (delta 45), reused 136 (delta 32), pack-reused 0
Receiving objects: 100% (149/149), 75.75 KiB | 724.00 KiB/s, done.
Resolving deltas: 100% (45/45), done.
- В вашей среде IDE откройте этот проект, и вы должны увидеть структуру проекта, аналогичную приведенной ниже, и вы можете запустить приложение с помощью SpringJpaCrudApplication.java
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── sprinjpacrud01
│ │ │ ├── controller
│ │ │ ├── dto
│ │ │ ├── model
│ │ │ ├── repository
│ │ │ ├── service
│ │ │ └── SpringJpaCrudApplication.java
│ │ └── resources
│ │ ├── application.properties
│ │ └── text_bundles...
│ └── test
│ └── java
├── pom.xml
├──.gitignore
├── mvnw
├── mvnw.cmd
└── README.md
├── External Libraries...
...
- В этом приложении есть две модели: Department(отдел) и Employee(сотрудник). Эти две модели связаны друг с другом как Department, имеющий много сотрудников, и Employee, принадлежащий только одному отделу.
- Для подключения к базе данных используйте application.properties в файле main/resources. Просто замените имя пользователя и пароль своими для PostgreSql.
- Создайте базу данных departments в вашем инструменте управления Postgres, где будут храниться модели отдела и сотрудника. Нет необходимости создавать таблицы вручную, только саму базу данных departments.
##connection to the database
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/departments
spring.datasource.username={ваш логин}
spring.datasource.password={ваш пароль}
# Allows Hibernate to generate SQL optimized for a particular DBMS
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
- Откройте Postman и введите следующую конечную точку и тело запроса.
- Отправьте запрос POST как добавление нового сотрудника в базу данных, используя ниже приведенный адрес и тело-запрос в JSON:
Адрес:
http://localhost:8080/employee
Тело-запрос в JSON:
{
"id": 1,
"name": "Caroline",
"position": "Manager"
}
Вы можете добавить несколько сотрудников, отправив по одному POST-запросу.
- То же самое для отдела
Адрес:
http://localhost:8080/department
Тело-запрос в JSON:
{
"id": 1,
"name": "Technical"
}
Вы можете добавить несколько отделов, отправив по одному POST-запросу.
В директории controller вы можете просмотреть контроллеры и заметить MainController, который использует клиент okHttp для назначения сотрудника в отдел, просто получив его идентификаторы в теле JSON. В Postman создайте новый запрос POST с адресом и телом JSON следующим образом: Адрес:
http://localhost:8080/main/post-get
Тело-запрос в JSON:
{
"em_id": 1,
"dep_id": 1
}
JSON ответ в Postman:
Несколько сотрудников относятся к техническому отделу, включая новую сотрудницу Кэролайн.
{
"id": 1,
"name": "Caroline",
"position": "Manager"
}
{
"id": 1,
"name": "Technical",
"employeeHashSet": [
{
"id": 1,
"name": "Caroline",
"position": "Manager"
},
{
"id": 11,
"name": "Jack",
"position": "Technician"
},
{
"id": 2,
"name": "Barbara",
"position": "Manager"
}
]
}
В директории controller вы можете изучить директорий exceptions и посмотреть ResponseExcepton, расширенный из класса ResponseEntityExceptionHandler. Это помогает обрабатывать выброшенные исключения на стороне сервера, такие как NullPointerException, IllegalArgumentException и т. д. В Postman отправьте GET-запрос сотрудника по идентификатору следующим образом:
Вместо идентификатора типа Long мы отправляем идентификатор типа String.
http://localhost:8080/employee/id?id=r
Тело ответа, отправленное классом ResponseExcepton с кодом статуса в Postman:
{
"status": "OK",
"time": "02-01-2023 03:45:20",
"msg": "Не удалось преобразовать id=r в требуемый тип число: 1, 2, 3..."
}
На стороне сервера вы получаете разрешенное исключение словом Resolved, MethodArgumentTypeMismatchException что значит исключение ошибочного типа данных.
: Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException
: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long';
Предоставленная мной техническая документация описывает структуру и функции проекта spring-jpa-crud, но не включает все конкретные примеры использования API. Чтобы использовать API в полной мере, вам потребуется изучить исходный код и опробовать различные адреса и функции, предоставляемые приложением.
Некоторые вещи, которые вы можете попробовать, включают:
- Отправка HTTP-запросов на различные адреса (например, GET http://localhost:8080/employee/id?id=1), чтобы увидеть сотрудника по конкретному идентификатору.
- Изменение модели данных (т. е. класса Employee например), чтобы увидеть, как эти изменения влияют на поведение приложения.
- Настройка конфигурации приложения (например, файла application.properties), чтобы увидеть, как это влияет на поведение приложения.
Надеюсь, это поможет! Дайте мне знать, если у вас есть вопросы.
👩💻 @naraomur 📧 [email protected]