Tin tức mới

Truy vấn dữ liệu trong JPA

Ở 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


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

4 thoughts on “Truy vấn dữ liệu trong JPA

    1. Em có thể dùng phương thức tên là getProductList() hoặc getProductCollection() trong entity Category
      CategoryJpaController jpaController = new CategoryJpaController(utx, emf);
      Category category = jpaController.findCategory(catId);
      List ps = category.getProductList();

  1. xin chỉ em cách persist một trường kiểu nvarchar tiếng viết vào database , em insert vào được nhưng nó không hiểu tiếng việt

  2. Đây không phải là vấn đề của jpa, bạn kiểm tra lại xem dữ liệu có được chuyển tới entity manager có chính xác hay không?

Comments are closed.