- Đã gửi tài liệu cho sinh viên tham khảo
- Hướng dẫn cài đặt Visual Studio Code để lập trình Spring Boot
- Hướng dẫn các cách tạo Spring Boot project. Nếu dùng IntelliJ phải dùng bản Ultimate mới có thể tạo Spring Boot project.
- Hướng dẫn tạo REST API với annotation
@RestController, @RequestMapping, @GetMapping, @Repository, @Autowire
- Request / Response
- Tạo Class, sử dụng Source Action context menu để sinh mã getter, setter, constructor
- Sử dụng Lombok annotation
@Data, @AllArgsConstructor
để rút gọn code phải viết khi định nghĩa class - Phân biệt khác biệt giữa
List
là interface, cònArrayList
là class - Trả về JSON qua REST API.
- Hướng dẫn cài đặt JSON viewer extension trong Chrome để xem dữ liệu JSON trả về tốt hơn.
- Code ví dụ mẫu REST bán chưng cư
- Bài tập về nhà: xây dựng REST API để chọn ra đội hình thi đấu của đội bóng Barcelona
- Random số nguyên trong một dải.
- Chọn ngẫu nhiên một phần tử trong mảng.
- Chọn ngẫu nhiên không lặp lại phần tử đã chọn.
- Chữa bài tập chọn đội bóng. Xem link
Bài tập lập trình về nhà:
-
Hoàn thiện phương thức thay cầu thủ đáp ứng đúng quy luật bóng đá quốc tế.
- Mỗi trận được phép thay tối đa 5 cầu thủ.
- Cầu thủ đã bị thay ra không được phép vào sân lại.
-
Viết mô tả quy trình book chỗ, đặt vé chiếu phim qua mạng:
- Các đối tượng (model)
- Các trạng thái
- Luồng xử lý và thay đổi trạng thái
Hãy tạo Github repo, push code lên, giải thích chi tiết từng bước rồi gửi riêng cho thầy!
- Tìm hiểu về cách hoạt động của git (trạng thái files, git head)
- clone một project có sẵn, khởi tạo một project mới có sử dụng git
- hướng dẫn commit code, push code lên remote repository
- hướng dẫn tạo nhánh và làm việc với nhánh
- hướng dẫn merge code với (git merge & rebase)
- hướng dẫn xử lý khi bị conflict code
- tìm hiểu và sử dụng git revert, git reset, git stash
- giới thiệu tìm hiểu mô hình git workflow
- giới thiệu tìm hiểu mô hình GitHub workflow
- Mời anh Tân lên chữa bài Barcelona Team, chức năng thay cầu thủ : substitute.
- Thực hành lập trình REST API tính chỉ số BMI để ôn tập.
- Xây dựng mô hình Model ứng dụng VinCinema: chọn cấu trúc dữ liệu nào phù hợp để lưu Reservation.
- Giới thiệu dịch vụ reduce size file ảnh jpeg, png --> webp để giảm dung lượng ổ cứng.
- Đọc chapter 12 trong quyển sách "Introduction to Java" của Daniel Lang
- Giải thích Check vs Uncheck Exception (RuntimeException)
- Tân hỏi làm sao bắt được nhiều exception trong một hàm
@ExceptionHandler({ BMILogicException.class, BMIException.class})
- Demo, hướng dẫn phương pháp bắt Exception cục bộ trong một RestController và trong cả một dự án. Cách trả về thông báo lỗi đẹp định dạng JSON.
- Yêu cầu các sinh viên bổ xung Exception Handling vào dự án Barcelona của anh Tân, làm ngay tại lớp để kiểm tra kỹ năng code.
- Chưa làm được "Hướng dẫn mô hình dự án VinCinema" vì sinh viên code lâu quá.
- Ôn lại throw exception cho Check và Uncheck Exception. Khái niệm unwinding calling stack.
- Thống nhất viết REST API cho Barcelona Team dựa theo mẫu của anh Tân.
- Nhắc lại viết @RestControllerAdvice để trả về lỗi đẹp hơn bằng JSON
- Làm quen với JUnit 5 và AssertJ
- Làm quen với WebFlux WebClient để kiểm thử REST API. Buổi sau sẽ thực hành chi tiết
Sinh viên vào muộn 8:17 mới có anh Tân, anh Đông, chị Hằng, chị Ngọc đến. Có vài anh nghỉ không xin phép. Kết quả bài tập tạo REST API:
- Tân: 100%
- Hằng: 100%
- Huy: 100%
- Tuấn Anh: 60%
- Đông làm được khoảng 60%. Nhưng máy Windows bị chặn firewall không test được.
- Giải thích cơ chế nhiều tầng của network: TCP/IP -> HTTP / HTTPS -> Application Layer sử dụng các định dạng JSON/XML để định dạng dữ liệu.
- Khác biệt giữa HTTP 2 và HTTP 1.1
- Giới thiệu các HTTP Client phổ biến trong Java: OkHttp, Retrofit.
- OpenFeign khai báo kết nối REST đến API Server bằng Annotation, có thể tuỳ chọn sử dụng HTTP Client.
- Thực hành viết Unit Test porting từ WebFlux Client.
- Team anh Tân đã gửi bài tập thiết kế mô hình Vincinema.
- Anh Tân chia sẻ team anh Tân sử dụng RestAssured để kiểm thử REST API.
Tình hình lớp:
- Long xin phép nghỉ vì phải release API cùng team.
- Sơn (Troy) nghỉ không phép.
- Đông code được, nhưng máy quá ít RAM nên không thể biên dịch.
- Nhật không xem kỹ bài giảng cũ, còn không biết mở một dự án Spring Boot để biên dịch.
- Đức không xem kỹ bài giảng cũ.
- Tuấn Anh, Ngọc mới code chập chững.
- Anh Tân chị Hằng 2 người code tốt nhất thì lại ngồi code cùng nhau.
- Nhìn chung sinh viên trẻ chưa chủ động mày mò xem trước, chưa hình dung ra giải pháp.
- Đã khởi tạo xong ứng dụng quản lý khách hàng CRM API
Bài tập về nhà
- Xem kỹ code BookStore
Tình hình lớp:
- Anh Huy xin nghỉ vì đi học lớp BigData
- Thực hành bổ xung POST, DELETE
- Giải thích tại sao lại có thêm POJO Class: vì không nên dùng Entity Class hứng request và trả về response
- Hướng dẫn dùng MapStruct để chuyển đổi dữ liệu giữa POJO Class và Entity Class
- Hướng dẫn sử dụng Logger, cấu hình Logger ra Console, File theo Class name và Log Level.
- Tại sao không nên dùng System.out.println để log
- Logging (ghi hành trình) khác gì với Monitoring (giám sát liên tục)
- Cơ chế Byte Code Manipulation giúp tạo mới class, thêm sửa xoá method, property sử dụng JavaAssist, ASM hoặc ByteBuddy
- Demo cách Lombok sử dụng ASM Byte code
- Khuyến cáo sử dụng ByteBuddy vì dễ học.
Tình hình lớp:
- Long xin phép nghỉ vì phải release API cùng team.
- Sơn (Troy) nghỉ không phép.
Bài tập về nhà
Tình hình lớp:
- Long xin phép nghỉ
- Tân xin phép nghỉ
- Sơn (Troy) nghỉ không phép.
Nộp ngay được bài tập tại lớp
- Đông
- Huy
- Đàm Tuấn Anh
Nộp trước hạn 12:00 đêm cuối ngày
- Ngọc
Tình hình lớp:
- Đức: Thầy ơi em bị ốm đang ở Nghê An em xin phép vắng buổi học hôm nay ạ
- Long nghỉ không phép.
- Tân học trực tuyến vì đi công tác trong HCM.
- Sơn (Troy) đã bị loại ra khỏi lớp
Bài tập giao tại lớp
- Đông 10 điểm
- Huy 10 điểm
- Hằng 5 điểm vì viết tất cả logic vào một test case
- Ngọc 8 điểm, trừ 2 điểm phần thiếu assertThat test case Delete
- Nhật 8 điểm, trừ 2 điểm phần thiếu assertThat test case Delete
Bài tập giao hãy giải thích các terms Tình hình lớp:
- Tân, Hằng, Huy nghỉ.
- Long nghỉ không phép.
Đến 2:00 chiều: các bạn đi học đều đã nộp bài.
Giao việc dịch viết bài chia sẻ lên blog Techmaster
- Chị Ngọc viết lại bài giải thích lên blog Techmaster
- Anh Nhật dịch bài Spring Boot MVC & REST Annotations With Examples
Thực hành các loại quan hệ. Ví dụ mẫu ở đây
- @OneToOne
- @OneToMany --> Phổ biến nhất
- @ManyToOne --> Phổ biến nhất
- @ManyToMany --> Phổ biến nhất
- Self reference
- Inheritance
Tình hình lớp:
- Tân học từ xa
Giới thiệu về các loại Query phổ biến trong JPA
-
Derived Query viết trong interface repository
-
@Query()
-
@Query(value = "SELECT * FROM USERS u WHERE u.status = 1", nativeQuery = true)
-
@NamedQuery viết bổ xung vào @Entity
-
Mã nguồn ví dụ DemoQuery
-
Hãy tìm cách display câu lệnh SQL mà Hibernate sinh ra cùng với giá trị của tham số truyền vào.
-
Viết câu lệnh SQL hay bất kỳ cách gì để liệt film theo năm dạng
map<String, List<Film>>
{
"1995": [
"Gone with wind",
"Titanic"
],
"1996": [
"Godzilla",
"God Father"
"XYZ Film"
]
}
Tình hình lớp:
- Tân, Hằng học từ xa
Bài tập giao về nhà nhưng chưa ai làm
- Mô hình hoá ứng dụng Vincinema bằng JPA Entity
- Cài đặc Docker: sinh viên tự cài ở nhà
- Khởi động MySQL và Postgresql bằng Docker container
- Ôn lại và bổ xung một số kỹ thuật định nghĩa Entity
@Temporal
@Index
: đánh chỉ mục cột@Transient
- Các vấn đề khi chuyển đổi từ H2 sang MySQL và Postgresql
- Sử dụng MySQL WorkBench và PGAdmin4
- Học cách sinh động dữ liệu Mockaroo
- Chấm bài tập mô hình hoá Vincinema
Những bạn đi muộn
- Đức
- Huy
- Nhật Những bạn nghỉ
- Tân
- Hằng học trực tuyến
Những bạn nghỉ
- Tân
- Hằng học trực tuyến
Giải thích Transaction và Nested Transaction.
- Nhật mới định nghĩa Entity, chưa chèn dữ liệu thử
- Tuấn Anh mới xong phần râu ria
- Ngọc xong phần chèn dữ liệu
- Huy đã xong cả phần thanh toán
- Đông code rất nhiều class, nhưng phần giữ chỗ, thanh toán chưa xong
Phân nhóm
- Đông + Ngọc: Bán xe VinFast
- Huy + Nhật: Nhật code React.js nối vào VinCinema
- Tuấn Anh + Đức: thuê VPS, deploy Spring Boot app lên IP tĩnh, kết nối Out System vào
- Demo chiến thuật tối giản, tập trung xử lý thuật toán quan trọng https://github.com/TechMaster/SpringBoot28Days/tree/main/22-SeatBooking/seatbooking
- Đức - Tuấn Anh demo ứng dụng đã deploy lên Heroku sử dụng Postgresql database, front end OutSystem
- Hỗ trợ Đông fix bug khi tạo bảng cần tránh trùng tên với từ khoá SQL như user, order, where, in, select
Hẹn mọi người thứ 4 bảo vệ tiếp