Welcome to MikeDaDev's Blog – notes on Java, backend & system design.

Explore
MikeDaDev's Blog

All posts

I like to write about stuff I'm into. You'll find a mix of web dev articles, tech news and random thoughts from my life. Use the search below to filter by title.

spring data jpa

Spring Data JPA là module của Spring Framework, nằm trên Java Persistence API (JPA). Thay vì viết boilerplate code để làm việc với database, bạn chỉ cần khai báo interface (kế thừa `JpaRepository`), Spring sẽ tự cung cấp phần implement cho các thao tác CRUD cơ bản. Điểm hay nhất là tự sinh câu SQL từ tên method (ví dụ `findByEmailAndStatus`), và hỗ trợ sẵn phân trang, sắp xếp, auditing.

spring jackson annotations

Các annotation của Jackson (có sẵn trong Spring Boot) cho phép kiểm soát chi tiết việc chuyển đổi (serialization và deserialization) giữa object Java và JSON. Với @JsonProperty (đổi tên trường), @JsonIgnore (bỏ dữ liệu nhạy cảm khi trả về), @JsonFormat (định dạng ngày tháng) hay @JsonInclude (lọc giá trị null), bạn tùy biến được cấu trúc dữ liệu qua API mà không phải đụng vào logic.

@Transactional & Spring AOP

@Transactional và Spring AOP (Aspect-Oriented Programming) là hai thứ đứng sau cơ chế quản lý transaction tự động của Spring. Nhờ chúng mà business logic tách được khỏi mấy việc kỹ thuật lặp đi lặp lại (cross-cutting concerns) như mở transaction, commit hay rollback.

Spring Boot Auto-configuration

Spring Boot Auto-Configuration chạy thế nào bên dưới: AutoConfigurationImportSelector, bộ lọc sớm dựa trên metadata sinh lúc build, ASM đọc annotation mà không nạp class, thứ tự của DeferredImportSelector, chuyển từ spring.factories sang AutoConfiguration.imports, và cách viết một Custom Starter dùng được trên production.

spring data core annotations

Spring Data có một loạt annotation như `@Id`, `@Query`, `@Repository`, `@Transient` để map class Java (entity) vào database và lo phần truy xuất dữ liệu. Nhờ chúng mà bớt được cả đống boilerplate: khai báo khoá chính, quan hệ giữa các bảng hay query tuỳ chỉnh đều gọn, dễ đọc, dễ bảo trì.

spring web bind annotations

Spring Web Bind Annotations là nhóm annotation trong Spring MVC và Spring WebFlux, đóng vai trò cầu nối: tự lấy dữ liệu từ các phần của HTTP Request (URL, Body, Headers) rồi gán (bind) vào tham số của method trong Controller.

@ManyToMany trong JPA

@ManyToMany trong JPA/Hibernate hoạt động ra sao: vì sao Hibernate xóa sạch bảng nối rồi insert lại (Write Amplification), vì sao không thêm được thuộc tính phụ (metadata), và cách làm dùng được trên production: tách thành hai @OneToMany qua Explicit Join Entity với @EmbeddedId và @MapsId.

@OneToMany & @ManyToOne trong JPA

Mấy cái bẫy hay gặp với @OneToMany và @ManyToOne trong JPA/Hibernate: EAGER ngầm, N+1 query và cách xử lý bằng EntityGraph hay BatchSize, lỗi MultipleBagFetchException do Cartesian Product, và StackOverflowError vì lỡ dùng Lombok @Data.