126 bài viết

Ngày 23 của 99 Ngày Spring: Spring Data JPA repository — JpaRepository với bộ CRUD có sẵn trên một interface trống, phả hệ Repository → CrudRepository → JpaRepository và cơ chế proxy trên SimpleJpaRepository, derived query sinh truy vấn từ tên method với lưới fail-fast lúc khởi động.

Ngày 23 của 99 Ngày Java: enum — tập giá trị cố định an toàn kiểu với == đáng tin, lớp đầy đủ với field, constructor và method, switch expression exhaustive biến compiler thành lưới an toàn khi thay đổi, cùng EnumMap và EnumSet chuyên dụng — và quy tắc lưu trữ theo name() thay vì ordinal.

Ngày 22 của 99 Ngày Spring: entity đầu tiên với @Entity/@Id và lý do bắt buộc no-arg constructor (entity là class, không phải record), chiến lược sinh khóa IDENTITY vs SEQUENCE trên PostgreSQL, @Column với ràng buộc và ánh xạ kiểu — wrapper cho cột nullable, cùng show-sql và quy ước snake_case.

Ngày 22 của 99 Ngày Java: wrapper class và autoboxing — cầu nối tự động giữa primitive và đối tượng, Integer cache với hiện tượng == đúng ở 127 sai ở 128, bẫy unboxing null gây NPE, boxing thầm lặng trong vòng lặp, và cách chọn giữa parseInt với valueOf.

Ngày 21 của 99 Ngày Spring, mở đầu giai đoạn Spring Data JPA: impedance mismatch giữa đối tượng và bảng quan hệ, phân vai JPA (đặc tả) — Hibernate (cài đặt) — Spring Data JPA (tầng tiện ích), EntityManager với persistence context, và lựa chọn ddl-auto đúng cho từng môi trường.

Ngày 21 của 99 Ngày Java: vì sao nối chuỗi bằng + trong vòng lặp có chi phí bình phương, StringBuilder với capacity và bộ API thường dùng, String pool — lý do == đôi khi tình cờ đúng nhưng equals mới là quy tắc, cùng String.format và text block cho chuỗi nhiều dòng dễ đọc.

Ngày 20 của 99 Ngày Spring: same-origin policy — luật của trình duyệt, preflight OPTIONS và vì sao một lần gọi sinh hai request, cấu hình @CrossOrigin và global theo profile, cùng các quy tắc an toàn: không mở * ở production, đọc lỗi CORS ở DevTools, và cái bẫy khi thêm Spring Security.

Ngày 20 của 99 Ngày Java: record — lớp dữ liệu trong một dòng khai báo với equals/hashCode/toString tự sinh, compact constructor cho validation, so sánh với Lombok và JavaBean, value semantics cùng record pattern của Java 21 — và ranh giới sử dụng: DTO dùng record, entity dùng class.

Ngày 19 của 99 Ngày Spring: upload với MultipartFile và tên lưu trữ do server sinh, giới hạn max-file-size/max-request-size với lỗi 413 chuẩn ProblemDetail, download stream qua Resource với Content-Disposition, chặn path traversal bằng normalize + startsWith, và checklist an toàn cho production.