Ở 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.
cho em hỏi câu lệnh để lấy bảng sản phẩm từ bảng categories thông qua categories với ạ
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();
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
Đâ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?