Spring Boot là gì? Cách tạo Crud trong dự án Spring Boot

16:40 19/06/2023

Spring Boot là gì? Làm thế nào để tạo Crud trong dự án Spring Boot? Hãy cùng tìm hiểu ở bài viết này nhé!

Spring Boot là một dự án phát triển bởi Java (ngôn ngữ java) trong hệ sinh thái Spring framework. Nó giúp cho các lập trình viên chúng ta đơn giản hóa quá trình lập trình một ứng dụng với Spring và tập trung vào việc phát triển business cho ứng dụng.

Ở thời điểm hiện tại, Spring Boot có lẽ đang là framework nổi tiếng và được sử dụng phổ biến nhất trong phát triển các ứng dụng sử dụng ngôn ngữ Java. Ứng dụng được xây dựng trên nền tảng Spring framework nó có tất cả các tính năng của Spring cộng thêm những tiện ích mà nó mang lại như giảm thiểu các bước cấu hình phức tạp, nhúng server container (Tomcat, Jetty hoặc Undertow) tự động vào ứng dụng giúp chúng ta có thể khởi chạy một ứng dụng ngay lập tức, quản lý dependence thông minh v.v.

Tất cả điều này đã tạo nên sự ưa thích đối với cộng đồng developer trên khắp thế giới, các công ty cũng đang dần chuyển sang dùng Spring Boot cho các dự án tiếp theo. Lựa chọn học Spring Boot ở thời điểm hiện tại là một quyết định đúng đắn vì thị trường việc làm đang rộng mở hơn rất nhiều. 

Cách tạo và triển khai Crud trong project Spring Boot

  1. Khởi tạo project Spring Boot

Để khởi tạo một project Spring Boot nhanh chóng các bạn có thể truy cập vào trang Spring Initializr và lựa chọn các thông số cấu hình cho dự án, cũng như các dependency cần thiết. Hoặc có thể khởi tạo project maven với các dependency như sau.

Nếu dùng Spring Initializr, các bạn có thể thêm các dependency này bằng chọn Add dependencies ở tab Dependencies. 

Khởi tại Spring Boot

Cấu trúc project Spring Boot

Bao gồm:

  • Trong một project Spring Boot thường sẽ có các layer chính
  • Domain: chứa các ánh xạ database – entity
  • Repository: định nghĩa các DAO (Data access object) class dùng để làm việc với database
  • Service: chứa các business logic class
  • Controller: nhận request từ khách hàng
  • Mapper: dùng để convert qua lại giữa entity và dto (có thể có hoặc không)
  • Exception Hanlder: xử lý các exception xảy ra trong quá trình thực thi yêu cầu của khách hàng
Spring Boot Crud

Dự án khi hoàn thành sẽ có cấu trúc như thế này. Hãy bắt đầu đi từng phần một. Đừng lo, vì bài viết này sẽ upload code để các bạn dễ dàng thực hành!

Domain layer

Đối với hầu hết các dự án thì chúng ta thường bắt đầu với domain layer trước, sau khi đã phân tích thiết kế cơ sở dữ liệu xong thì chúng ta sẽ đến bước định nghĩa các entity ánh xạ các table tương ứng dưới database.

Trong bài demo này dùng H2 database, các bạn có thể linh hoạt sử dụng các database khác như SQL, MySQL, Mariadb tùy ý. Vì bài demo đã sử dụng JPA và JPA provider bên dưới là Hibernate nên có thể dễ dàng chuyển đổi qua lại giữa các database mà code không bị ảnh hưởng.

Trong nội dung bài viết này  sẽ chỉ định nghĩa một User Entity như sau:

User entity

Các Entity class phải được chú thích với @Entity annotation, ngoài ra các annotation khác của lombok được sử dụng để giảm thiểu việc triển khai các method getter, setter, constructor v.v

Repository Layer

Đây là layer chúng ta định nghĩa các DAO class dùng để thao tác với database. Tuy nhiên trong phần này chúng ta không cần phải triển khai các method cơ bản như là findById(), findAll, save(), delete(), update() vì chúng đã được triển khai thông qua một tầng abstraction được đặt ở trên JPA implementation.

Để sử dụng các tính năng cơ bản này chúng ta chỉ cần khai báo một Repository class thừa kế từ CrudRepository.

Repository Layer

Service Layer

Như đã đề cập trước đó thì Service layer sẽ là nơi chứa các business chính của dự án, là cầu nối giữa Controller layer và Repository layer.

Với một ứng dụng Crud thì chúng ta cần ít nhất các method dùng cho việc thêm, sửa, xóa, cập nhật và tìm kiếm. Chúng ta sẽ đi qua từng phần này sau đây: 

Trước tiên chúng ta cần định nghĩa một UserService Interface và một UserServiceImpl class dùng để triển khai các method định nghĩa trong UserService.

Service Layer

Và…

Service Layer

Các bạn có thấy cách làm này có hơi mất thời gian không? Sao không tạo luôn UserService class rồi triển khai code trong đó luôn? Điều này hoàn toàn được, tuy nhiên các bạn nên biết đây là một cách làm giúp tăng tính mở rộng code.

Giả sử hiện tại, UserService và UserServiceImpl đang hoạt động ổn. Về sau, chúng ta cần chỉnh sửa một số tính năng trong UserServiceImpl để tăng performance hoặc adapt cho phù hợp với business mới. Nhưng do UserServiceImpl đã được phát triển qua một thời gian dài nên việc sửa code trong này rất khó khăn, lúc đó chúng ta có thể tạo ra một UserServiceImplNew mới cũng implement UserService và triển khai code tách khỏi UserServiceImpl.

Sau đó, chúng ta chỉ cần thay đổi việc sử dụng UserServiceImplNew thay vì UserServiceImpl mà không cần chỉnh sửa code ở những chỗ khác. 

Những chỗ khác đang sử dụng UserServiceImpl mà không có nhu cầu chỉnh sửa thì vẫn có thể sử dụng. Do không có chỉnh sửa gì trên UserServiceImpl nên chúng ta yên tâm là các tính năng sẽ vẫn hoạt động như cũ.

Create

Đến với chức năng đầu tiên, chúng ta cần tạo một hàm createUser dùng để tạo và lưu một record User xuống database.

Các bạn có thể tùy ý thêm các mã kiểm tra khác như email có hợp lệ không? email có tồn tại trước đó hay chưa? Sau đó sử dụng method save() để lưu xuống database.

Lưu ý rằng khi sử dụng H2 trong project Spring Boot thì mặc định nó đã cấu hình tự động cho bạn sử dụng một database H2-mem, nghĩa là khi tắt ứng dụng thì dữ liệu sẽ bị mất.

Update

Với hàm update() thì client cần truyền cho chúng ta ID của user muốn cập nhật và một User object chứa các thông tin được cập nhật.

Update

Delete

Tính năng này khá đơn giản, chúng ta sẽ nhận vào một User ID và xóa User trong database có ID tương tứng. 


Find

Sẽ có 2 method thường được dùng là tìm kiếm theo ID hoặc lấy tất cả.

Tìm kiếm ID

Controller Layer

Đến layer cuối cùng dùng để nhận các yêu cầu từ khách hàng, chúng ta sẽ cần đến @RestController annotation để đánh dấu một class là một controller, và @RequestMapping, @GetMapping, @PostMapping, @PutMapping, @DeleteMapping để chỉ định các endpoint cụ thể cho các API.

Controller Layer

Trong đó các bạn cần chú ý @RequestBody dùng để parse request body sang User object tự động và @PathVariable dùng để parse ID từ Path parameter.

Vậy là chúng ta đã biết cách xây dựng một ứng dụng Spring Boot đơn giản với các tính năng Crud cơ bản nhất mà một ứng dụng cần có. Bên cạnh đó chúng ta cũng biết cách sử dụng các annotation để ánh xạ dữ liệu và tạo ra các endpoint cho ứng dụng. Chúc các bạn thành công!

Bộ môn Ứng dụng phần mềm
Trường Cao đẳng FPT Mạng cá cược bóng đá cơ sở Hà Nội

Cùng chuyên mục

Đăng Kí học Fpoly 2023

Bình Luận