Пошук працівників за місцем розташування
Надійна система управління персоналом є важливою складовою кожного бізнесу. У цій статті ми розглянемо кроки для створення Spring MVC додатку. Для зберігання та отримання працівників за їх місцем розташування ми використовували MySQL. Також ми протестуємо їх функціональність за допомогою JUnit.
Ми також розглянемо використання Hibernate JPA для автоматичного створення бази даних, що усуває необхідність писати SQL запити для налаштування даних. Це служить для різних цілей, таких як розподіл ресурсів, управління логістикою або покриття певних регіонів. Цей посібник дозволить вам:
- Використовувати Spring MVC для розробки REST API для запитів даних про працівників за місцем розташування.
- Використовувати Hibernate JPA для автоматичного створення схеми бази даних.
- Перевіряти функціональність додатку за допомогою тестів JUnit.
Постановка задачі
Необхідно створити додаток, який отримує працівників з бази даних за їх місцем розташування. Дані повинні бути доступні через RESTful API. Додаток має зберігати масштабованість, модульність і тестованість.
Підхід
1. Spring MVC та JPA
Ми будемо використовувати Spring MVC для створення REST API ендпоінту, який оброблятиме запити та відповіді для отримання даних про працівників залежно від їх місця розташування. Spring Data JPA буде відповідати за взаємодію з базою даних, надаючи ефективний механізм доступу до даних. Hibernate служитиме як провайдер JPA.
2. MySQL База даних.
Ми використовуватимемо MySQL як систему керування базами даних (DBMS) для зберігання даних працівників, зокрема їх місцеположення. Hibernate відповідатиме за генерацію та зміни схеми бази даних, спрощуючи нам зосередження на бізнес-логіці.
3. Тестування за допомогою JUnit.
Для тестування всього стеку додатка ми розробимо тести JUnit для рівнів сервісу та контролера без використання мока. Повне тестування надасть різноманітні тестові дані для імітації різних сценаріїв та крайніх випадків, знижуючи ймовірність помилок та дефектів.
Кроки реалізації
Ось кроки для реалізації Spring Boot додатку з Hibernate та MySQL.
Крок 1: Налаштування середовища в Eclipse (Передумови):
- Встановіть Java 17+, MySQL, та Eclipse IDE Enterprise Edition.
- Встановіть необхідні плагіни для Maven та Spring Boot / Eclipse.(необов'язково)
Створення Spring Boot проекту:
i) Використовуйте Spring Initializr для створення Spring Boot проекту.
ii) Виберіть Maven як тип проекту, Java як мову, та версію вище за 3.2.1(необов'язково).
iii) Введіть ім'я групи та артефакту. (Тут я використовую Employee як артефакт та Dhan як ім'я групи).
iv) Виберіть версію Java 17 та упаковку JAR. Використовуйте CTRL+B для вибору залежностей проекту.
v) Натисніть GENERATE, щоб завантажити zip файл, що містить всі вибрані елементи та залежності.
Інакше, ми можемо відкрити Eclipse і створити новий Maven проект безпосередньо(потрібно буде вручну додати залежності в pom.xml).
Ви можете вручну додати залежності до pom.xml, як показано нижче:
Крок 2: Налаштування MySQL в application.properties
i) У папці src/main/resources буде файл під назвою application.properties.
ii) Оскільки ми використовуємо MySQL, вказано datasource.url як mysql.
iii) Ви також можете додати інші системи керування базами даних.
Для MySQL localhost:3306 є за замовчуванням URL.
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=****
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.properties.hibernate.format_sql=true
Тут, “test” - це ім'я бази даних.
“root” — це ім'я користувача для MySQL. jpa.hibernate налаштовано на update, що означає виконання запитів на основі методів Hibernate. show-sql встановлено на true, і це дозволить показувати запити в терміналі під час роботи додатку.
Крок 3: Визначення структури додатку (Entity, Repository, Services та Controller)
Клас Entity
Створіть сутність Employee для відображення на таблицю бази даних. Ця сутність буде використовуватися Hibernate JPA для автоматичного створення та опису даних у базі даних. Анотація @Entity вказує, що клас є сутністю (містить дані для бази даних).
@Entity
@Table(name = "employees")
public class EmployeeEntity {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String name;
private String location;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}
(Порада: Використовуйте CTRL+SPACE для імпортування необхідних пакетів або отримання підказок)
Структура проекту:
Інтерфейс Repository
Створіть інтерфейс репозиторію для виконання операцій CRUD, розширивши JpaRepository:
@Repository
public interface EmployeeRepository extends JpaRepository {
List findByLocation(String location);
}
Тут, EmployeeEntity — це ім'я Entity (таблиця бази даних), а Integer — тип даних Primary key (первинний ключ), який присвоєний класу EmployeeEntity.
Сервісний рівень
Тепер реалізуємо бізнес-логіку в сервісному класі. Створіть клас під назвою EmployeeService.java та додайте код нижче. Тут ми отримуємо дані про працівників залежно від їх місцезнаходження, автовизначаючи поле employeeRepository та використовуючи метод findByLocation().
@Service
public class EmployeeService {
@Autowired
private final EmployeeRepository employeeRepository;
public EmployeeService(EmployeeRepository employeeRepository) {
this.employeeRepository = employeeRepository;
}
public List getEmployeesByLocation(String location) {
return employeeRepository.findByLocation(location);
}
}
Контролерний рівень
i) Створіть клас контролера EmployeeController.java та використовуйте код нижче.
ii) Створіть REST API ендпоінт /api/location/{location} для запиту працівників за їх місцезнаходженням.
@RestController
@RequestMapping("/api")
public class EmployeeController {
private final EmployeeService employeeService;
public EmployeeController(EmployeeService employeeService) {
this.employeeService = employeeService;
}
@GetMapping("/location/{location}")
public ResponseEntity> getEmployeesByLocation(@PathVariable String location) {
List employees = employeeService.getEmployeesByLocation(location);
return new ResponseEntity<>(employees, HttpStatus.OK);
}
}
Крок 4: Запуск додатку
Запустіть додаток Spring Boot, використовуючи опцію Run -> Run as Spring Boot App або Java Application у Eclipse.
Hibernate автоматично створить таблицю працівників в базі даних employee_db під час виконання програми.
Перевірка роботи з інструментами API:
i) Використовуйте інструменти, такі як Postman, Talend API, для тестування ендпоінту API.
ii) Використовуйте метод GET для отримання даних з бази даних.
iii) Ви також можете запустити додаток у браузері, відвідавши localhost:8080 та вказаний ендпоінт.
iv) Якщо отримаєте код відповіді 200 success, це означає, що дані успішно додано в базу даних.
Вихідні дані:
http://localhost:8080/api/getByLocation?location=India
Крок 5: Тестування за допомогою JUnit
Тест сервісного рівня
Напишіть тест для перевірки бізнес-логіки:
@SpringBootTest
public class EmployeeServiceTest {
@Autowired
private EmployeeService employeeService;
@Autowired
private EmployeeRepository employeeRepository;
@Test
public void testGetEmployeesByLocation() {
Employee employee1 = new Employee();
employee1.setName("Alice");
employee1.setLocation("New York");
Employee employee2 = new Employee();
employee2.setName("Charlie");
employee2.setLocation("New York");
employeeRepository.save(employee1);
employeeRepository.save(employee2);
List employees = employeeService.getEmployeesByLocation("New York");
Assertions.assertEquals(2, employees.size());
}
}
Тест контролерного рівня
Напишіть тест для перевірки REST API:
@SpringBootTest
@AutoConfigureMockMvc
public class EmployeeControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private EmployeeRepository employeeRepository;
@Test
public void testGetEmployeesByLocation() throws Exception {
Employee employee1 = new Employee();
employee1.setName("Alice");
employee1.setLocation("New York");
Employee employee2 = new Employee();
employee2.setName("Charlie");
employee2.setLocation("New York");
employeeRepository.save(employee1);
employeeRepository.save(employee2);
mockMvc.perform(get("/employees/location/New York"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.size()").value(2));
}
}
Вихідні дані:
Висновок
Нам вдалося розробити ефективну систему за допомогою Spring Boot. Це дозволяє користувачу отримувати дані на основі їх місцезнаходження. Ми реалізували це, використовуючи Spring MVC, Hibernate JPA та JUnit. За допомогою цього методу ручне управління базою даних більше не є необхідним. Це підвищує надійність та підтримуваність додатку.
Пункти, на які слід звернути увагу:
- Переконайтеся в правильній конфігурації файлу application.properties для підключення до бази даних і налаштувань Hibernate.
- Використовуйте анотацію @Entity для відображення Java класів на таблиці бази даних.
- Реалізуйте інтерфейси репозиторіїв для виконання операцій CRUD за допомогою Spring Data JPA.
- Використовуйте анотацію @Service для визначення бізнес-логіки та @Autowired для впровадження залежностей.
- Перевіряйте додаток за допомогою тестів JUnit для забезпечення надійності та продуктивності.
Перекладено з: Spring MVC with MySQL and Junit