Spring MVC з MySQL та JUnit

Пошук працівників за місцем розташування

Надійна система управління персоналом є важливою складовою кожного бізнесу. У цій статті ми розглянемо кроки для створення 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 файл, що містить всі вибрані елементи та залежності.

pic

Інакше, ми можемо відкрити Eclipse і створити новий Maven проект безпосередньо(потрібно буде вручну додати залежності в pom.xml).

Ви можете вручну додати залежності до pom.xml, як показано нижче:

pic

Крок 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 для імпортування необхідних пакетів або отримання підказок)

Структура проекту:

pic

Інтерфейс 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.

pic

Hibernate автоматично створить таблицю працівників в базі даних employee_db під час виконання програми.

pic

Перевірка роботи з інструментами API:

i) Використовуйте інструменти, такі як Postman, Talend API, для тестування ендпоінту API.

ii) Використовуйте метод GET для отримання даних з бази даних.

iii) Ви також можете запустити додаток у браузері, відвідавши localhost:8080 та вказаний ендпоінт.

iv) Якщо отримаєте код відповіді 200 success, це означає, що дані успішно додано в базу даних.

Вихідні дані:

http://localhost:8080/api/getByLocation?location=India

pic

Крок 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));  
}  
}

Вихідні дані:

pic

Висновок

Нам вдалося розробити ефективну систему за допомогою 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

Leave a Reply

Your email address will not be published. Required fields are marked *