Hôm nay, mình trình bày với các bạn chút ít về criteria, named query và hql. So sánh chúng giúp bạn lựa chọn được công cụ đúng đắn trong mỗi trường hợp.
Muốn biết loại query nào tốt hơn trong trường hợp nào, chúng ta thử xem cách hibernate xử lý từng loại query.
HQL: Hibernate sử dụng antlr - một công cụ phân tích cú pháp để parse câu HQL rồi xuất ra mã SQL thông thường và thực hiện. Mỗi lần bạn sử dụng, quá trình này lại lặp lại.
Criteria: Hibernate không parse gì cả. Nó sẽ xuất ra mã SQL và thực hiện. Mỗi lần sử dụng, quá trình này lại lặp lại.
Named query: Khác với hai loại trên, đây là loại query mà bản thân câu query được viết tách rời với code. Nó thường nằm trong thẻ <hibernate-mapping> đằng sau các khai báo mapping, trong file xml chung hoặc riêng với các khai báo mapping. Hibernate chỉ parse và xuất mã cho named query một lần khi mapping file được cấu hình vào trong session factory. Cách làm này đem lại lợi thế về hiệu năng cho named query hơn hẳn so với hai loại query trên. Nhưng bất lợi ở chỗ, mọi thay đổi đến query đều cần bạn khởi động lại application để named query parse, gen lại rồi nạp lại vào session factory.
Nói chung, criteria sẽ thích hợp cho việc build các search query. Named query thích hợp cho các câu query ít phải thay đổi và dùng nhiều lần. HQL đơn giản hơn nên vẫn sẽ thích hợp cho các query không cần có nhiều điều kiện phức tạp và không được dùng quá nhiều lần.
Không có nhận xét nào:
Đăng nhận xét