🎯 Mục tiêu bài học:
- Hiểu rõ cách tổ chức các package trong dự án Spring Boot chuẩn MVC.
- Phân biệt giữa
Entity
,Model
(DTO) để truyền dữ liệu. - Tổ chức giao diện web bằng Thymeleaf Layout giúp tái sử dụng và dễ bảo trì.
1. Cấu trúc package trong dự án
src/
└── main/
└── java/
└── com.lungcode/
├── config/
├── controller/
├── entity/
├── model/
├── repository/
└── service/
🗂️ Giải thích các package:
com.lungcode.config
Chứa các lớp cấu hình nhưWebConfig
,SecurityConfig
, cấu hình upload file, hay cấu hình Thymeleaf Layout.com.lungcode.controller
Chứa các@Controller
điều hướng luồng xử lý giữa người dùng và dữ liệu. Ví dụ:HomeController
,ProductController
,…com.lungcode.entity
Chứa các@Entity
ánh xạ với bảng trong cơ sở dữ liệu (ví dụ:Product
,User
,Order
…).com.lungcode.model
Chứa các DTO (Data Transfer Object) để hiển thị dữ liệu ra view, tách biệt vớiEntity
.
👉 Gợi ý: Sử dụngModel
giúp tránh lộ dữ liệu nhạy cảm từ Entity (VD: mật khẩu).com.lungcode.repository
Chứa các interfaceextends JpaRepository
, phục vụ thao tác với CSDL.com.lungcode.service
Chứa logic xử lý nghiệp vụ.
Có thể chia nhỏ:ProductService
,UserService
ProductServiceImpl
nếu áp dụng Interface + Implementation pattern.
2. Cài đặt và cấu hình Thymeleaf Layout
📦 Bước 1: Thêm thư viện hỗ trợ layout vào pom.xml
<dependency>
<groupId>nz.net.ultraq.thymeleaf</groupId>
<artifactId>thymeleaf-layout-dialect</artifactId>
</dependency>
🗂️ Bước 2: Tạo giao diện layout
📁 File: src/main/resources/templates/layout.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"> <head> <title>Spring Boot Shop</title> </head> <body> <header> <h2>🛒 LungCode Shop</h2> </header> <main layout:fragment="content"> <!-- Nội dung trang sẽ được chèn vào đây --> </main> <footer> <p>© 2025 LungCode</p> </footer> </body> </html>
📄 Bước 3: Sử dụng layout trong trang con
📁 File: home.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}"> <body> <main layout:fragment="content"> <h3>Chào mừng đến với cửa hàng Spring Boot</h3> </main> </body> </html>
✅ Kết quả:
- Bạn chỉ cần chỉnh sửa một lần trong
layout.html
(header, footer, menu…) - Các trang con kế thừa giao diện gốc và chỉ thay đổi phần nội dung riêng biệt (
fragment
tên làcontent
)
🔧 Gợi ý bổ sung:
- Có thể tạo thêm layout cho trang admin, ví dụ
admin-layout.html
để phân biệt giao diện người dùng và quản trị. - Nên tạo các
fragment
riêng cho header, navbar, footer… để sử dụng với cả layout hoặc page đơn.
🧠 Tổng kết
Thành phần | Mục đích chính |
---|---|
config | Cấu hình hệ thống |
controller | Điều hướng request / response |
entity | Đại diện bảng CSDL |
model (DTO) | Dữ liệu hiển thị lên view, tránh lộ thông tin |
repository | Truy vấn dữ liệu |
service | Chứa logic xử lý chính |
Thymeleaf Layout | Tái sử dụng layout, chia nhỏ HTML dễ bảo trì |