Ở bài Làm việc với SQL Server dùng JPA trên Netbeans chúng ta đã biết làm việc với JPA, nhưng cũng mới chỉ dừng lại ở mức độ sử dụng các câu lệnh truy vấn có sẵn, trong bài viết này chúng ta sẽ học cách dùng các cách truy vấn khác để làm việc với cơ sở dữ liệu. Ta sẽ tiếp tục triển khai ví dụ ở bài viết trước để liệt kê các User có full_name có chứa từ “nguyễn”.

Sau đây là các bước để truy vấn dữ liệu dùng JPA

Bước 1: Tạo đối tượng EntityManager

[sourcecode language=”java”]
EntityManager entityManager = Persistence.createEntityManagerFactory("FptGamesPU").createEntityManager();
[/sourcecode]

FptGamesPU là tên được lấy ở file persistence.xml trong thư mục META-INF.

Bước 2: Viết câu lệnh truy vấn

Khâu khó khăn nhất là chúng ta phải viết các câu lệnh truy vấn dùng JP Query các bạn có thể tham khảo ở trang của oracle.

[sourcecode language=”java”]
String jpaQuery = "SELECT u FROM User u WHERE u.fullName = :fullName";
[/sourcecode]

Nhưng bạn cũng có thể dùng các câu lệnh mà Netbeans đã tạo sẵn gọi là named query ở entity fpt.games.entity.User.

Bước 3: Tạo đối tượng Query

[sourcecode language=”java”]
Query query = entityManager.createQuery(jpaQuery, User.class);
[/sourcecode]

Nếu tạo named query thì dùng lệnh:

[sourcecode language=”java”]
Query query = entityManager.createNamedQuery("User.findByFullName", User.class);
[/sourcecode]

Bước 4: Truyền các tham số vào câu lệnh truy vấn nếu có

Dùng phương thức setParameter() để truyền các tham số vào đối tượng query vừa tạo ra. Chúng ta có thể sử dụng tên của tham số hoặc số thứ tự của nó, nhưng tốt nhất là dùng tên để  tránh nhầm lẫn giữa các tham số.

[sourcecode language=”java”]
query.setParameter("fullName", "%nguyễn%");
[/sourcecode]

Bước 5: Lấy kết quả và xử lý

Chúng ta có nhiều phương thức khác nhau để lấy về kết quả của các câu lệnh truy vấn, một trong những phương thức thường được dùng là getResultList():

[sourcecode language=”java”]
List result =query.getResultList();
System.out.println(result);
[/sourcecode]

JP Query cho phép chúng ta thực hiện các thao tác mạnh mẽ như làm việc với SQL mà không cần phải dùng tới SQL.

source code