So sánh sessionfactory và session trong hibernate năm 2024
Trước đây các bạn đã làm quen với Hibernate, nay mình sẽ giới thiệu các bạn về HQL hay còn gọi là Hibernate Query Language . Trên thực tế, đây là SQL được chuyển đổi để viết các truy vấn trong Hibernate. Nó có một số điểm khác biệt chính.
Hãy yêu cầu Hibernate trả lại cho chúng ta tất cả người dùng mà nó có trong cơ sở dữ liệu. Đây là yêu cầu đó sẽ như thế nào: Đó là tất cả, để so sánh, chúng tôi trình bày một truy vấn tương tự trong SQL: Đây `User`là tên của lớp, và `user`là tên của bảng. Mã Java hoàn chỉnh sẽ trông như thế này:
Mặt khác, HQL rất giống với SQL - nó cũng có các toán tử:
1.2 Ví dụ làm việc với HQLCó lẽ ví dụ trước hơi khó hiểu do tên bảng và trường giống nhau. Hãy đưa ra một ví dụ đặc biệt mà điều này sẽ dễ dàng hơn. Giả sử chúng ta có bảng user_data chứa các trường sau:
Chúng tôi sẽ tạo một lớp Java sẽ ánh xạ tới bảng này:
Bây giờ hãy viết một số ví dụ: HQL SQL từ người dùng chọn * từ user_data từ Người dùng trong đó id=3 chọn * từ user_data trong đó id=3 từ Người dùng có cấp độ trong (10,20,30) chọn * từ user_data nơi user_level IN (10, 20, 30) từ đơn đặt hàng của người dùng bằng cách tạo asc chọn * từ thứ tự user_data theo user_created asc từ Người dùng có tên như 'kiểm tra' chọn * từ user_data nơi user_name như 'kiểm tra' Các truy vấn rất giống nhau và việc đọc các truy vấn HQL khi bạn đã quen với tên lớp và các trường của chúng cũng dễ như đọc các truy vấn SQL. Nó có thể khó viết hơn một chút, nhưng một lần nữa, các truy vấn rất phức tạp hiếm khi được viết bằng HQL. 1.3 Sử dụng chọnTrong HQL, bạn có thể sử dụng
1khi kiểu dữ liệu của kết quả không khớp với kiểu được chỉ định trong
2. Ví dụ: chúng tôi muốn lấy tên của tất cả người dùng trong bảng user_data của chúng tôi , thì chúng tôi cần viết truy vấn sau: Ngoài ra, nếu có sự trùng lặp giữa các tên, thì bạn có thể sử dụng toán tử
3:
Bí danh hoạt động giống như trong SQL:
Chà, hoàn toàn ở dạng mã Java, yêu cầu này sẽ giống như thế này:
Lưu ý rằng truy vấn phải trả về một danh sách tên. Tên thuộc loại Chuỗi, do đó, cả loại hàm và tham số loại của lớp Truy vấn đều thuộc loại Chuỗi. |