Hibernate Reactive Coroutines - ใช้ Hibernate Reactive ได้เหมือน Spring Data JPA
(github.com/clroot)สวัสดีครับ/ค่ะ ผม/ฉันได้สร้างและนำมาแชร์ไลบรารีที่มอบความสะดวกแบบ Spring Data JPA ในสภาพแวดล้อม Hibernate Reactive + Kotlin Coroutines
เหตุผลที่สร้างขึ้นมา
ระหว่างใช้ Hibernate Reactive รู้สึกไม่สะดวกเพราะไม่มีฟีเจอร์อย่าง findByEmail(), @Query แบบใน Spring Data JPA การต้องจัดการกับ Mutiny API โดยตรงทำให้มี boilerplate มากขึ้น และต้องเขียน HQL เองสำหรับแต่ละ query method
แม้จะมี Spring Data R2DBC แต่ก็ต้องยอมเสียฟีเจอร์อย่าง entity mapping หรือ Lazy Loading ของ Hibernate ไป ส่วน Panache ก็ใช้ได้เฉพาะกับ Quarkus จึงไม่สามารถใช้ใน Spring Boot ได้
ฟีเจอร์หลัก
- สร้าง implementation ของ Repository interface อัตโนมัติ: เพียงสืบทอด
CoroutineCrudRepositoryก็จะสร้างเมธอด CRUD ให้อัตโนมัติ - Query method: query ตามชื่อเมธอด เช่น
findByEmail(),existsByName(),countByStatus() - Pagination: รองรับ
Page<T>,Slice<T>,Pageable - แอนโนเทชัน
@Query: เขียน JPQL ได้โดยตรง พร้อมการ bind พารามิเตอร์แบบ Named/Positional
ตัวอย่างการใช้งาน
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
}
เทคโนโลยีสแต็ก
Kotlin 2.1, Hibernate Reactive 3.1, Mutiny, Vert.x, Spring Boot 3.4
ลิงก์
สามารถใช้งานได้ทันทีผ่าน JitPack ยินดีรับฟีดแบ็ก!
ยังไม่มีความคิดเห็น