Hibernate Reactive Coroutines - đưa Hibernate Reactive đến gần trải nghiệm như Spring Data JPA
(github.com/clroot)Xin chào. Mình tạo một thư viện mang lại sự tiện lợi của Spring Data JPA trong môi trường Hibernate Reactive + Kotlin Coroutines và muốn chia sẻ với mọi người.
Lý do thực hiện
Khi sử dụng Hibernate Reactive, mình thấy khá bất tiện vì thiếu các tính năng như findByEmail() hay @Query của Spring Data JPA. Vì phải trực tiếp xử lý Mutiny API, lượng boilerplate tăng lên và mình cũng phải tự viết HQL cho từng phương thức truy vấn.
Dù có Spring Data R2DBC, nhưng khi đó phải từ bỏ các tính năng như entity mapping hay Lazy Loading của Hibernate, còn Panache thì chỉ dành cho Quarkus nên không thể dùng trong Spring Boot.
Tính năng chính
- Tự động triển khai interface Repository: chỉ cần kế thừa
CoroutineCrudRepositorylà các phương thức CRUD sẽ được tạo tự động - Phương thức truy vấn: truy vấn dựa trên tên phương thức như
findByEmail(),existsByName(),countByStatus() - Pagination: hỗ trợ
Page<T>,Slice<T>,Pageable - Annotation
@Query: tự viết JPQL, bind tham số Named/Positional
Ví dụ sử dụng
interface UserRepository : CoroutineCrudRepository<User, Long> {
suspend fun findByEmail(email: String): User?
suspend fun findAllByStatus(status: Status, pageable: Pageable): Page<User>
@Query("SELECT u FROM User u WHERE u.role = :role")
suspend fun findByRole(role: Role): List<User>
@Modifying
@Query("UPDATE User u SET u.status = :status WHERE u.id = :id")
suspend fun updateStatus(id: Long, status: Status): Int
}
Tech stack
Kotlin 2.1, Hibernate Reactive 3.1, Mutiny, Vert.x, Spring Boot 3.4
Liên kết
Có thể dùng ngay thông qua JitPack. Rất mong nhận được phản hồi!
Chưa có bình luận nào.