🎯 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
&lt;!DOCTYPE html&gt; &lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot; xmlns:layout=&quot;http://www.ultraq.net.nz/thymeleaf/layout&quot;&gt; &lt;head&gt; &lt;title&gt;Spring Boot Shop&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;header&gt; &lt;h2&gt;🛒 LungCode Shop&lt;/h2&gt; &lt;/header&gt; &lt;main layout:fragment=&quot;content&quot;&gt; &lt;!-- Nội dung trang sẽ được chèn vào đây --&gt; &lt;/main&gt; &lt;footer&gt; &lt;p&gt;© 2025 LungCode&lt;/p&gt; &lt;/footer&gt; &lt;/body&gt; &lt;/html&gt;
📄 Bước 3: Sử dụng layout trong trang con
📁 File: home.html
&lt;!DOCTYPE html&gt; &lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot; xmlns:layout=&quot;http://www.ultraq.net.nz/thymeleaf/layout&quot; layout:decorate=&quot;~{layout}&quot;&gt; &lt;body&gt; &lt;main layout:fragment=&quot;content&quot;&gt; &lt;h3&gt;Chào mừng đến với cửa hàng Spring Boot&lt;/h3&gt; &lt;/main&gt; &lt;/body&gt; &lt;/html&gt;
✅ 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ì |