jOOQ là gì? Tự học jOOQ qua code ví dụ

jOOQ là gì? Tự học jOOQ qua code ví dụ

jOOQ là gì?

jOOQ (java Object Oriented Query) là một framework java.

jOOQ là chuẩn truy vấn database theo hướng đối tượng. (nó khá giống với hibernate, cũng thực hiện mapping table trong database với class trong java)

Cũng giống như Hibernate, jOOQ thực hiện generate các class entity từ table trong database.

Tính năng và ưu điểm của jOOQ

  • Database First: hỗ trợ tất cả những gì SQL hỗ trợ
  • Typesafe SQL: tránh lỗi lúc compile khi sử dụng sql
  • Code Generation: tự động tạo các class entity tương ứng với table trong database
  • Active Record: jOOQ thực hiện CRUD (create/read/update/delete) và mapping POJO (Plain Old Java Object) trực tiếp trên Active Records.
  • Multi-tenancy: jOOQ hỗ trợ cấu hình database schema và table trong quá trình runtime. (Điều này giúp bạn dễ dàng hơn khi sử dụng nhiều schema)
  • Standardisation: jOOQ thực hiện chuyển đổi thành các câu sql phổ thông nên nó có thể hoạt động trên tất cả database.
  • Procedures: jOOQ hỗ trợ xử lý stored procedures hoặc nhúng procedures vào trong code.
  • Query Lifecycle: hỗ trợ các thao tác như logging, transaction, ID generation …
  • Open Source: jOOQ có 2 phiên bản là bản thương mại và bản miễn phí. Với bản miễn phí thì chúng ta hoàn toàn yên tâm sử dụng vì nó có cộng đồng lớn và document rất chi tiết.
  • Light: jOOQ rất nhẹ, nhẹ hơn rất nhiều so với Hibernate, nên nó rất phù hợp sử dụng cho các service nhỏ trong mô hình microservice.

Ví dụ jOOQ

Ví dụ query

SELECT TITLE
FROM BOOK
WHERE BOOK.PUBLISHED_IN = 2011
ORDER BY BOOK.TITLE
create.select(BOOK.TITLE)
      .from(BOOK)
      .where(BOOK.PUBLISHED_IN.eq(2011))
      .orderBy(BOOK.TITLE)

jOOQ cũng hỗ trợ các câu lệnh phức tạp như join, limit…

SELECT AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME, COUNT(*)
FROM AUTHOR
JOIN BOOK ON AUTHOR.ID = BOOK.AUTHOR_ID
WHERE BOOK.LANGUAGE = 'DE'
AND BOOK.PUBLISHED > DATE '2008-01-01'
GROUP BY AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME
HAVING COUNT(*) > 5
ORDER BY AUTHOR.LAST_NAME ASC NULLS FIRST
LIMIT 2
OFFSET 1
create.select(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME, count())
      .from(AUTHOR)
      .join(BOOK).on(AUTHOR.ID.equal(BOOK.AUTHOR_ID))
      .where(BOOK.LANGUAGE.eq("DE"))
      .and(BOOK.PUBLISHED.gt(date("2008-01-01")))
      .groupBy(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME)
      .having(count().gt(5))
      .orderBy(AUTHOR.LAST_NAME.asc().nullsFirst())
      .limit(2)
      .offset(1)

Ví dụ insert

INSERT INTO AUTHOR
       (ID, FIRST_NAME, LAST_NAME)
VALUES (100, 'Hermann', 'Hesse');
create.insertInto(AUTHOR,
        AUTHOR.ID, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME)
      .values(100, "Hermann", "Hesse")
      .execute();

 

 

 

Okay, Done!

References:

https://www.jooq.org/

stackjava.com