Trong một ứng dụng web thông thường, crud là công việc không thể thiếu.
I.Giới thiệu:
Trước hết
Database: Nơi lưu trữ dữ liệu.
Crud:
+ Create: tạo một đối tượng mới và lưu lại vào database.
+ Read: Lấy ra đối tượng đã được lưu trước đó từ database để hiển thị ra ngoài ứng dụng.
+ Update: Thay đổi thông tin của đối tượng đã lưu trước đó rồi lưu lại vào database.
+ Delete: Xoá đối tượng đã lưu khỏi database.
II. Tạo project
Công nghệ sử dụng:
JDK 11.0.5
Spring Data JPA
Spring Boot 2.4.5
MariaDB 10.4.*
1. Tạo Project Spring Boot:

2. Lựa chọn dependencies:

3. Tạo database trong Mariadb:

4. Thêm các Thuộc tính cần thiết vào file application.properties


spring.datasource.url: đường dẫn database cần kết nối;
spring.datasource.username: user name có thể truy cập vào database;
spring.datasource.password: mật khẩu của user;
spring.datasource.driver-class-name: driver kết nối mariadb.
5. Tạo các package chính:
Model: Nơi ta lưu đối tượng.
Repository: Nơi thực hiện tác vụ liên quan đến database.
Service: Nơi xử lí các nghiệp vụ chính.
Controller; Nơi điều hướng.
Exception: Nơi xử lý lỗi
Ultils: Hàm hỗ trợ
6. exception

a. ProjectException

Tạo Class custom exception kế thừa từ RuntimeException
b. ExceptionResponse

Đây là dữ liệu trả về nếu bắt được lỗi.
c.ProjectExceptionAdvice

Đây là nơi bắt ProjectException nếu được ném ra.
@ControllerAdvice đánh dấu nơi xử lý exception.
@ExceptionHandler bắt exception xảy ra.
7.Utils

Ở đây chứa các hàm bổ trợ.
a. TimeUtils

Dùng để chuyển định dạng thời gian từ String sang LocalDate với format String dạng d/M/yyyy
b.ValidUtils

Chứa các hàm validate email và phone number
8. model

a. User
@Entity: để đánh dấu đây là một đối tượng có thể lưu vào database
@Id: đánh dấu khoá chính của đối tượng
@GeneratedValue: đánh dấu tự động tạo id khi tạo đối tượng user mới để lưu vào database.
@Data: tự động tạo các hàm get, set, hashcode,…
@Column: cột trong database;
length: độ dài kí tự của cột
unique: dữ liệu lưu vào phải khác nhau
b. UserDTO

UserDTO là dữ liệu giao tiếp với phía giao diện, ở đây cần có dto để dễ dàng kiểm tra các điều kiện cần thiết trước khi đưa vào database, tránh gặp lỗi.
9. repository chúng ta tạo UserRepository

Chúng ta dùng JpaRepository để tự động tạo ra câu lệnh SQL tương ứng cho các tác vụ crud vào database.
10. service

Tầng xử lý nghiệp vụ
a. UserService

Để định nghĩa các phương thức cần sử dụng
findAll: lấy ra tất cả các User trong database.
findById: lấy ra User có id cụ thể
create: Tạo mới User.
update: Cập nhật User đã có
deleteById: Xoá user có trong database có id cụ thể.
convert: Kiểm tra điều kiện và chuyển từ UserDTO → User
b. UserServiceImpl

UserServiceImpl để thực hiện các phương thức đã được định nghĩa bởi UserService
Ở đây chúng ta Autowrited userRepository để thực hiện việc crud vào database.
10. package controller tạo UserController

Nhận dữ liệu từ api gửi lên và gọi Service sử lí các nghiệp vụ tương ứng rồi trả lại.
@RestController để đánh dấu controller và có thể nhận và gửi giữ liệu bằng json
@RequestParam để lấy param có trong đường dẫn ở request gửi lên
@RequestBody để lấy body của request
III. Ví dụ:
Dùng PostMan để thực hiện kiểm tra
+ Create User:

Gửi một request dạng json vào đường dẫn create-user để tạo một user mới trong database.
Kết quả trả về:

Bảng user trong database đã được thêm

+ List All User:

Dữ liệu trả về:

+ Show detail User:

ở đây id=2 là param được lấy bởi @RequestParam trong controller.
Dữ liệu trả về

+ Update User:

Trong database, user có id = 2 đã được sửa

+ Delete User:

database đã xoá.

Nguyễn Quốc Vinh