0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Hướng Dẫn Cấu Trúc Dự Án Spring Boot: Từ A đến Z

Đăng vào 1 tháng trước

• 3 phút đọc

Cấu Trúc Dự Án Spring Boot: Hướng Dẫn Chi Tiết

Gần đây, tôi đã quay lại với Java và quyết định tìm hiểu về các framework liên quan, đặc biệt là Spring Boot. Trong bài viết này, tôi sẽ chia sẻ những kiến thức mà tôi thu thập được cùng với việc xây dựng một dự án nhỏ (RESTful API CRUD cho người dùng).

Giới Thiệu Dự Án

Dự án của chúng ta sẽ thực hiện chức năng CRUD cho người dùng. (Lưu ý: phần xác thực chưa được đề cập ở đây). Nội dung của bài viết sẽ bao gồm:

  1. Cấu trúc dự án
  2. Các bước xây dựng dự án

1) Cấu Trúc Dự Án

  • Config: Nơi cấu hình các thông số cho dự án.
  • Controller: Nhận các yêu cầu từ client.
    • Filter: Kiểm tra dữ liệu vào controller và quyền người dùng.
    • Request: Các object mà client gửi lên server. Không sử dụng chung với DB để tách biệt các layer.
    • Response: Các object trả về cho client.
    • Controller Classes: Chứa các lớp controller để xử lý yêu cầu.
  • Exception: Nơi tập trung xử lý các ngoại lệ.
  • Model: Định nghĩa các thực thể (Entity) của cơ sở dữ liệu.
  • Repository: Kết nối tới cơ sở dữ liệu, thực hiện các chức năng lấy và lưu dữ liệu mà không chứa logic xử lý nghiệp vụ.
  • Service: Chứa các logic nghiệp vụ.
  • Utils: Các phương thức thường xuyên được tái sử dụng.
  • Resources: Chứa các file *.properties.
  • Test: Được sử dụng cho các bài kiểm tra đơn vị.

2) Các Bước Xây Dựng Dự Án

B0: Quy Định Về Dữ Liệu

Dữ liệu gửi và nhận sẽ ở định dạng JSON với kiểu snake_case. Ví dụ:

json Copy
{"error":"not_found","error_msg":"Người dùng không tồn tại"}

Khi có lỗi, cấu trúc dữ liệu trả về như sau:

json Copy
{"error": "mã lỗi", "error_msg": "mô tả chi tiết về lỗi"}

B1: Pom

File pom.xml cần bao gồm các thư viện cần thiết:

xml Copy
<dependencies>
   <!-- Thêm các dependencies của dự án -->
</dependencies>

Ngoài ra, cần thêm plugin để tự động tạo database:

xml Copy
<plugin>
    ...
</plugin>

B2: Cấu Hình Dự Án

Dự án sẽ chạy với 3 môi trường khác nhau: dev, staging, prod. Cấu hình trong file application.properties:

properties Copy
spring.profiles.active=dev

Cấu hình cụ thể cho môi trường dev trong file application-dev.properties:

properties Copy
# Database Properties
spring.datasource.url=jdbc:mysql://localhost:2216/users-database?allowPublicKeyRetrieval=true&useSSL=false
...

B3: Entity

Định nghĩa lớp User trong package Model:

java Copy
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    ...
}

B4: Repository

Tạo lớp UserRepository để tương tác với cơ sở dữ liệu:

java Copy
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    Page<User> findAll(Pageable pageable);
}

B5: Service

Tạo lớp Service cho người dùng để xử lý nghiệp vụ:

java Copy
public interface UserService {
    Optional<User> findUser(Long id);
    ...
}

B6: Controller

Tạo lớp Controller chịu trách nhiệm cho các API CRUD:

java Copy
@RestController
@RequestMapping("/api/v1")
public class UserController {...}

Định nghĩa các API như tạo người dùng, lấy danh sách, cập nhật, xóa người dùng.

B7: Kiểm Tra

Sử dụng thư viện Spring MockMvc để kiểm tra các API:

java Copy
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class ApplicationTests {...}

Kết Luận

Tôi mới chỉ tìm hiểu để xây dựng dự án với Spring Boot và chưa hoàn thiện tất cả các tính năng, chẳng hạn như xác thực. Trong bài viết tiếp theo, tôi sẽ bổ sung thêm phần xác thực và phân quyền cho dự án. Nếu bạn muốn tham khảo mã nguồn, hãy để lại email, tôi sẽ gửi cho bạn.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào