- Đã 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
Listlà interface, cònArrayListlà 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 termsTì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