Làm chủ spring boot bằng cách tạo cách tạo crud trong 30 phút

Chào các bạn.

Dạo gần đây với công việc lau dọn rót nước cho dev thì mình có nhận thấy java cũng có khá nhiều cái hay, lướt qua 1 vòng các team java ở cty mình thì thấy đang đa phần dùng Spring boot để viết API Websevice nên mình cũng có tò mò học thử xem thực sự nó nguy hiểm cỡ nào.

Việc đầu tiên là phải cài môi trường để code gồm maven, jdk java, IDE, SQL.. cái này các bạn tự mày mò nhé.

Mầy mò trên mạng thì mình cũng biết cách cài IDE, và tải java về để code ở đây mình dùng eclipse các bạn có thể dùng Intellij cho sịn cũng được thui bắt đầu vào công việc học Spring nào..

Công việc đầu tiên là vào trang https://start.spring.io Để tạo 1 empty source Spring boot trước đã ở ở đây mình viết API tận dụng luôn mySQL trong máy trước có cài xamp bạn nào chưa có thì có thể cài Xamp thì cũng có tích hợp luôn mySQL cho mình rồi

Mục đầu tiên là Group cái này là tên của project ô ở dưới là tên package mình đặt tên project của mình là devtayto và package là API, bên cạnh là các dependencies các bạn có thể chọn những cái cần thiết cho dự án của mình.  Ở đây mình chỉ viết mỗi webservice nên mình chọn 3 cái là web, JPA để thao tác với database và cuối cùng là mySQL  cuối cùng là ấn gennerate Project để download source về máy

Giải nén ra sau đó mở eclipse chọn file -> import > maven -> Existing Maven Project

Cuối cùng là ấn Finish và đợi 1 lát để maven download các dependencies cần thiết về sau khi import xong ta được như sau

 

Mở xampp và start Mysql

giờ mình sẽ setup database trong application.properties như sau

server.port = 6913
spring.jpa.hibernate.ddl-auto = update
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=

Điểm nổi trội nhất của spring boot là auto configuration chúng ta không cần tạo bảng trong DB chỉ cần config application thì bảng sẽ được tự động tạo dựa trên entity đã định nghĩa nên chúng ta không cần phải vào SQL để tạo bảng cái này mình thích nhất ở Spring boot

Ok xong setup database giờ ta sẽ xây dựng các package cần thiết ở đây mình dùng Mô hình MVC để xây dựng restfull API webservices các bạn click chuột phải vào package devtayto.API chọn new 1 package và đền tên package đó vào ở đây ta cần tạo thêm 7 package như hình

 

Đây là cấu trúc thường gặp trong các dự án về Spring boot nó có thể hơi khác với kiến thức về MVC các bạn từng học trên trường để mình giải thích qua về tác dụng của các package này

  1.  controler:  ở đây sẽ đóng vai trò là View khi API gọi thì controler sẽ được gọi đầu tiên và trả về json nên nó thường được gọi là view của 1 webservice
  2. dto (Data Transfer Object): đây là model được dùng trong controler
  3. entity: Các đối tượng entity được ánh xạ với SQL
  4. repository : repository  của JPA được dùng để thao tác với SQL như thêm sửa xóa vv.. hay còn gọi là DAO
  5. Service:  các service và Implement của dự án
  6. untils: mục này để lưu trữ những function được dùng chung cho toàn dự án

Vậy là xong cấu trúc của Project bây giờ chúng ta bắt tay vào code đầu tiên ở package dto các bạn tạo cho mình 1 class StudentDto như sau

Tiếp theo ta sẽ tạo entity cho nó

  • @Table(name = “students”) : Tên table trong database ở đây mình đặt là students
  • @Id: chỉ định thuộc tính primary key của table ở đây mình cho tăng tự động  và phải để kiểu nguyên thủy là long để spring có thể nhận dạng được nhé
  • @Column(name = “schoolname”): ánh xạ tới tên các colums trong bảng students

Tiếp theo mình sẽ tạo 1 interface service StudentService  gồm các method thêm sửa xóa student

Sau đó tạo 1 Class StudentRepository  extends JpaRepository nó đóng vai trò như lớp dao vậy chỉ khác là JpaRepository  nó đã tích hợp hết cho chúng ta các hàm thêm sửa xóa để thao tác với database rồi quá tuyệt vời :))

Sau đó ta sẽ tạo 1 class StudentServiceImpl  để override lại các hàm mà ta đã xây dựng trong StudentService và viết logic xử lý thêm sửa xóa vào đây lúc này ta sẽ inject class StudentRepository  vừa được tạo ở trên bằng @Autowired để sử dụng call xuống database vì ta sử dụng thư viện JPA nên nó đã cung cấp sẵn cho ta những hàm cần

  • findAll(): lấy tất cả mọi thứ trong DB hàm này trả về 1 List các row trong DB
  • findOne(id): truyền vào ID để lấy 1 row theo id
  • save(student): truyền vào 1 đối tượng cần lưu trữ xuống database hàm này là hàm upsert nếu id tồn tại thì update còn chưa tồn tại thì sẽ  insert dữ liệu mới
  • delete(id): truyền vào id cần xóa hàm này để xóa 1 đối tượng theo id

Trong unlils ta sẽ xây dựng 2 class gồm  ApiMessages  để lưu trữ message khi bắn ra lỗi và 1  class common để chuyển đổi dữ liệu từ dto sang entity và ngược lại

 

 

Ok cuối cùng là tới controler ta xây dựng như sau

  • @Controller : đánh dấu cho spring biết đây là controler
  • @RequestMapping(“students”): chỉ định đường dẫn mình đặt là student thì khi chạy api sẽ có dạng localhost:8080/students
  • @Autowired
    private StudentService studentService; inject service vừa tạo để sử dụng trong controler

Bây giờ chúng ta sẽ đi tạo từng API một

Get ALL:

  • HttpStatus.OK: set status trả về OK = 200
  • @GetMapping(“”): định nghĩa kiểu phương thức request ở đây mình để kiểu get và không chỉ định thêm đường dẫn khi call API thì ta sẽ setup postmain sẽ được như sau

 

Tương tự các API khác ta có

Get Student theo ID 

  • @GetMapping(“{id}”): Phương thức GET với ID được truyền trên thanh url
  • @PathVariable(“id”) : lấy giá trị ID trên thanh url

Ở đây mình sẽ check xem ID đã tồn tại hay chưa nếu chưa tồn tại mình sẽ set message vào class ApiMessages  sau đó trả message ra cho người dùng kèm HttpStatus.NOT_FOUND = 404 nghĩa là ID không tồn tại nếu đã tồn tại sẽ get ra cho trả về ra json kèm status thành công HttpStatus.OK

update student

 

 

  • @PutMapping(“”): Kiểu PUT
  • @RequestBody StudentDto: đóng gói json truyền vào trên body thành đối tượng StudentDto

để đóng gói được ta cần truyền header

Content-Type kiểu application/json

 

Tương tự với như những API trên thì API delete  Student ta tạo như sau

Call postman

Vậy là mình đã tạo xong 1 rest API với spring boot trong bài hướng dẫn mình có đưa hình ảnh code nhằm để các bạn tự gõ thì sẽ hiểu ra nhiều thứ hơn là coppy trường hợp xấu nhất thì mới nên download code trên git về thui nhé mình vẫn khuyến khích các bạn tự gõ hơn 🙂

Chúc các bạn thành công.!

Download source