Query database từ tên phương thức trong Spring Data JPA

Trong bài viết trước, mình đã giới thiệu với các bạn tổng quan về Spring Data JPA và đã làm một ví dụ sử dụng phương thức findById() có sẵn trong interface JpaRepository để truy vấn database lấy dữ liệu theo cột primary key và phương thức findByName() để lấy thông tin sinh viên theo tên. Tuyệt nhiên không có bất kỳ một class nào implement interface HelloRepository nhưng chúng ta vẫn truy vấn được các thông tin chúng ta muốn. Đó là một tính năng rất hay của Spring Data JPA phải không các bạn? 😀 Để làm được như vậy, các bạn phải tuân theo cú pháp của Spring Data JPA trong việc đặt tên method. Cụ thể như thế nào? Chúng ta hãy cùng nhau tìm hiểu trong bài viết này các bạn nhé!

Đầu tiên, mình cũng sẽ tạo một Maven project để làm ví dụ:

Query database từ tên phương thức trong Spring Data JPA

Cấu trúc của project này tương tự như các bước chuẩn bị mình đã làm trong bài viết Tổng quan về Spring Data JPA nha các bạn!

Chúng ta sẽ sử dụng Java 17 cho ví dụ này:

Maven dependencies:

spring.xml:

persistence.xml:

Table student:

Database hiện tại đang có những thông tin sinh viên như sau:

Query database từ tên phương thức trong Spring Data JPA

Entity Student:

StudentRepository class có nội dung ban đầu như sau:

Application class cũng có nội dung ban đầu như sau:

OK, các bước chuẩn bị đã xong, giờ chúng ta đi vào chủ đề chính của bài viết này các bạn nhé!



Bây giờ, mình sẽ liệt kê tất cả các quy tắc để đặt tên method trong Spring Data JPA giúp chúng ta không cần phải implement interface mà vẫn lấy được dữ liệu chúng ta cần.

Đầu tiên thì tên của method, các bạn phải viết nó bắt đầu với một trong các tên như sau: find…By, read…By, query…By, count…By, và get…By. Và theo sau đó là tên thuộc tính của entity mà các bạn muốn tìm.

Giả sử bây giờ mình tìm thông tin sinh viên theo lớp như sau:

thì khi chạy, các bạn sẽ thấy kết quả như sau:

Query database từ tên phương thức trong Spring Data JPA

Hoặc tìm số sinh viên tên Khanh như sau:

Kết quả:

Query database từ tên phương thức trong Spring Data JPA

Nếu các bạn muốn giới hạn số record trả về thì các bạn có thể thêm từ First hoặc Top kèm với số record mà các bạn muốn trả về vào trước từ By trong tên của phương thức theo cú pháp trên.

Nếu không có số record thì mặc định chỉ có 1 record được trả về nha các bạn.

Ví dụ như:

Kết quả:

Query database từ tên phương thức trong Spring Data JPA

Nếu các bạn muốn tìm theo nhiều điều kiện khác nhau thì tên của phương thức phải kèm theo nhiều tên thuộc tính của entity và ứng với đó các bạn phải có nhiều parameter cho phương thức.

Các parameter này phải theo thứ tự như thứ tự của tên thuộc tính trong tên phương thức nha các bạn.

Ví dụ giả sử các bạn tìm theo tên và lớp của sinh viên thì tên phương thức của các bạn cần phải là findByNameAndClazz(String name, String clazz), 2 parameter name và clazz phải cùng thứ tự như tên phương thức.

Kết quả:

Query database từ tên phương thức trong Spring Data JPA

Chúng ta còn có thể order kết quả trả về bằng cách thêm từ OrderBy…Asc (tăng dần) hoặc OrderBy…Desc (giảm dần) vào cuối tên phương thức.

Trong dấu 3 chấm sẽ là tên thuộc tính của entity mà chúng ta sử dụng để order nha các ban.

Ví dụ:

Kết quả:

Query database từ tên phương thức trong Spring Data JPA

Các bạn để ý là: đối với mỗi ví dụ ở trên của mình, các bạn đều thấy câu lệnh SQL mà Spring Data JPA đã generate. Nhìn vào đó, các bạn có thể hiểu thêm cách mà Spring Data JPA đã làm phải không? 😀

5/5 - (1 bình chọn)

One thought on “Query database từ tên phương thức trong Spring Data JPA

  1. Anh @Khanh Nguyen ơi, cho em hỏi: nếu muốn nhóm kết quả (group by) thì dùng câu lệnh như thế nào a? Mình có thể custom được câu lệnh truy vấn không?

Add Comment