Nếu bạn đã làm việc với Spring Data JPA trong một khoảng thời gian bất kỳ - có thể bạn đã quen thuộc với các phương thức truy vấn dẫn xuất
@Repository
public interface BookRepository extends MongoRepository {
List findByAuthor[String name];
}
Chúng là một cách tiện lợi và nhanh chóng để giảm bớt gánh nặng viết truy vấn vào Spring Data JPA bằng cách chỉ cần xác định tên phương thức
Trong tình huống giả định này - chúng ta đã định nghĩa một
logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
6 cho một lớp logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
7, lớp này có một thuộc tính được gọi là logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
8 thuộc loại logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
9Lời nhắc nhở.
logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
6 chỉ là một public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
1 chuyên dụng phù hợp với Mongo, đến lượt nó là một public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
2 chuyên biệtThay vì triển khai phương thức này trong một dịch vụ đang triển khai
public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
3 - Spring Data JPA tạo một truy vấn tự động được cung cấp tên của phương thức. Nó sẽ tạo một truy vấn trả về danh sách tất cả các bản ghi logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
7, với một bản ghi phù hợp là logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
8Khi phương thức được gọi với một số đầu vào, yêu cầu sau được thực hiện
find using query:
{ "author" : "Max Tegmark"}
fields: Document{{}}
for class:
class com.example.demo.Book in collection: books
Ghi chú. Để xem kết quả này, bạn sẽ phải đặt mức sửa lỗi từ
public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
6 thành public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
7logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
Đây là một tính năng cực kỳ linh hoạt và mạnh mẽ của Spring Data JPA và nó cho phép bạn khởi động các truy vấn mà không cần tự viết các truy vấn hoặc thậm chí triển khai bất kỳ logic xử lý nào trong back-end
Tuy nhiên, chúng trở nên rất khó tạo khi yêu cầu các truy vấn phức tạp.
public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
Và đây chỉ là hai tham số. Điều gì xảy ra khi bạn muốn tạo truy vấn cho 5 tham số?
Ngoài ra, bạn sẽ tạo bao nhiêu biến thể phương pháp?
Đây là điểm mà rất có thể bạn sẽ muốn viết các truy vấn của riêng mình. Điều này có thể thực hiện được thông qua chú thích
public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
8Chú thích
8 được áp dụng ở cấp phương thức trong giao diệnpublic interface PropertyRepository extends MongoRepository { List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType]; }
6 và liên quan đến một phương thức duy nhất. Ngôn ngữ được sử dụng bên trong chú thích tùy thuộc vào back-end của bạn. Đương nhiên, đối với back-end Mongo, bạn sẽ viết các truy vấn Mongo gốc, tuy nhiên,logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
8 cũng hỗ trợ cơ sở dữ liệu quan hệ và chấp nhận các truy vấn gốc cho chúng hoặc JPQL trung lập [Ngôn ngữ truy vấn liên tục Java] được dịch tự động sang các truy vấn gốc củapublic interface PropertyRepository extends MongoRepository { List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType]; }
Khi phương thức chú thích được gọi - truy vấn từ bên trong chú thích
public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
8 kích hoạt và trả về kết quảGhi chú. Hướng dẫn này sẽ đề cập đến Spring Data JPA cùng với cơ sở dữ liệu Mongo và sẽ sử dụng các truy vấn áp dụng cho MongoDB
Nếu bạn muốn đọc thêm về cách viết truy vấn quan hệ/SQL, hãy đọc Spring Data JPA - Guide to the @Query Annotation của chúng tôi
Mô hình miền và kho lưu trữ
Hãy nhanh chóng xác định một mô hình
logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
7 mà chúng ta sẽ sử dụng như một public interface BookRepository extends MongoRepository {
}
4 cho kho lưu trữ của mình. Để thể hiện đúng các hoạt động khác nhau, chẳng hạn như sử dụng các toán tử public interface BookRepository extends MongoRepository {
}
5 và public interface BookRepository extends MongoRepository {
}
6 của Mongo, - chúng tôi sẽ có một vài thuộc tính khác nhauMongoDB xử lý các ID loại
logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
9 hoặc public interface BookRepository extends MongoRepository {
}
8. Tùy thuộc vào bạn chọn cái nào bạn sẽ sử dụng - và public interface BookRepository extends MongoRepository {
}
8 có thể dễ dàng được chuyển đổi thành Chuỗi và ngược lại nên không tạo ra nhiều khác biệtTrong mọi trường hợp, hãy xác định một
public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
3 đơn giản cho mô hình nàypublic interface BookRepository extends MongoRepository {
}
Nó hiện đang trống, nhưng nó chỉ hoạt động tốt cho các hoạt động CRUD, vì thực tế là
logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
6 là hậu duệ của giao diện public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
2. Ngoài ra, phân trang và sắp xếp được hỗ trợ ngay lập tứcTrong các phần sắp tới, chúng ta sẽ xem xét chính chú thích
8, cũng như cấu trúc truy vấn của MongoDB, cách tham chiếu các tham số của phương thức cũng như sắp xếp và sắp xếp trang.public interface PropertyRepository extends MongoRepository { List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType]; }
Hiểu chú thích @Query
Chú thích
public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
8 khá đơn giản và dễ hiểu@Query["mongo query"]
public List findBy[String param1, String param2];
Khi phương thức
@Query["mongo query"]
public List findBy[String param1, String param2];
5 được gọi, kết quả sẽ được trả về. Hãy nhớ rằng trong thời gian biên dịch, Spring Boot không biết trước loại truy vấn sẽ trả về. Chẳng hạn, nếu nó trả về nhiều kết quả và bạn chỉ có một giá trị trả về dự kiến duy nhất - một ngoại lệ sẽ được đưa ra trong thời gian chạyTùy thuộc vào bạn để đảm bảo rằng phản hồi của truy vấn khớp với kiểu trả về của phương thức
Bạn có thể có các truy vấn cố định hoặc động tại đây. Chẳng hạn, bạn có thể đơn giản hóa tên phương thức từ trước và ủy thác các tham số lộn xộn cho chú thích
public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
8@Query["query with param1, param2, param3"]
List findAllActive[];
@Query["query with param1, param2, param3"]
List findBy[param1, param2, param3];
Trong ví dụ đầu tiên, chúng tôi có một bộ tham số cố định, chẳng hạn như luôn tìm kiếm sách đang hoạt động ngay cả khi khách hàng không chỉ định điều đó. Đây là một lợi thế so với các phương thức truy vấn dẫn xuất vì tên phương thức rõ ràng. Ngoài ra, bạn có thể cung cấp tham số cho các phương thức mà sau đó có thể được đưa vào chính chú thích
public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
8@Query["{'active':true}"]
List findAll[];
@Query["{'author' : ?0, 'category' : ?1}"]
List findPositionalParameters[String author, String category];
@Query["{'author' : :#{#author}, 'category' : :#{#category}}"]
List findNamedParameters[@Param["author"] String author, @Param["category"] String category];
Đối với những người có thể chưa hoàn toàn quen thuộc với cấu trúc truy vấn của MongoDB, hãy tìm hiểu sơ qua về những cấu trúc đó trước khi đi sâu vào trích xuất các tham số phương thức và sử dụng chúng trong các truy vấn
Cấu trúc truy vấn MongoDB
Tuy nhiên, MongoDB có cấu trúc truy vấn khá đơn giản, khác với cấu trúc SQL. Nếu bạn chưa sử dụng MongoDB nhiều và nếu bạn đã quen với cơ sở dữ liệu quan hệ, bạn nên làm mới bộ nhớ của mình trên các cấu trúc này
Tất cả các truy vấn Mongodb diễn ra giữa các dấu ngoặc nhọn
{query}
Điều kiện bình đẳng tiêu chuẩn tuân theo một mẫu đơn giản
{
: ,
: ,
..
}
Chẳng hạn, chúng ta có thể truy vấn sách của mình dưới dạng
find using query:
{ "author" : "Max Tegmark"}
fields: Document{{}}
for class:
class com.example.demo.Book in collection: books
0Truy vấn này kiểm tra tất cả các tài liệu
logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
7 trong bộ sưu tập, phù hợp với cả logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
8 và @Query["query with param1, param2, param3"]
List findAllActive[];
@Query["query with param1, param2, param3"]
List findBy[param1, param2, param3];
0Number`. Ngoài ra, bạn có thể thêm các toán tử vào hỗn hợp tại đâyfind using query:
{ "author" : "Max Tegmark"}
fields: Document{{}}
for class:
class com.example.demo.Book in collection: books
1Truy vấn này kiểm tra xem
logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
8 có phải là bất kỳ giá trị nào được cung cấp hay không. Một số toán tử được hỗ trợ là @Query["query with param1, param2, param3"]
List findAllActive[];
@Query["query with param1, param2, param3"]
List findBy[param1, param2, param3];
2, @Query["query with param1, param2, param3"]
List findAllActive[];
@Query["query with param1, param2, param3"]
List findBy[param1, param2, param3];
3, @Query["query with param1, param2, param3"]
List findAllActive[];
@Query["query with param1, param2, param3"]
List findBy[param1, param2, param3];
4, @Query["query with param1, param2, param3"]
List findAllActive[];
@Query["query with param1, param2, param3"]
List findBy[param1, param2, param3];
5, @Query["query with param1, param2, param3"]
List findAllActive[];
@Query["query with param1, param2, param3"]
List findBy[param1, param2, param3];
6, @Query["query with param1, param2, param3"]
List findAllActive[];
@Query["query with param1, param2, param3"]
List findBy[param1, param2, param3];
7, @Query["query with param1, param2, param3"]
List findAllActive[];
@Query["query with param1, param2, param3"]
List findBy[param1, param2, param3];
8, @Query["query with param1, param2, param3"]
List findAllActive[];
@Query["query with param1, param2, param3"]
List findBy[param1, param2, param3];
9 và @Query["{'active':true}"]
List findAll[];
@Query["{'author' : ?0, 'category' : ?1}"]
List findPositionalParameters[String author, String category];
@Query["{'author' : :#{#author}, 'category' : :#{#category}}"]
List findNamedParameters[@Param["author"] String author, @Param["category"] String category];
0, mặc dù có khá nhiều toán tử và bạn nên tìm hiểu về chúng. Ví dụ: đây là truy vấn tìm kiếm tất cả tài liệu của bất kỳ tác giả nào trong số hai tác giả, với số trang từ 400 đến 500, không được phát hành vào năm 2018 và 2019find using query:
{ "author" : "Max Tegmark"}
fields: Document{{}}
for class:
class com.example.demo.Book in collection: books
2Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó
Đây là phần lớn kiến thức về truy vấn mà bạn sẽ cần cho rất nhiều truy vấn, nhưng đừng bỏ qua việc thực sự tìm hiểu về MongoDB trước khi nghiêm túc làm việc với nó. Ngoài ra, bạn cũng có thể muốn làm việc với các tập hợp
Nếu bạn muốn đọc thêm về các tập hợp với MongoDB - hãy đọc Dữ liệu mùa xuân MongoDB của chúng tôi - Hướng dẫn về chú thích @Aggregation
Tham chiếu các tham số phương thức được đặt tên và vị trí
Với kiến thức chức năng MongoDB trong vành đai của chúng tôi - hãy xem cách chúng tôi có thể tham chiếu các tham số phương thức. Bạn có thể tham khảo chúng thông qua tên của chúng, kết hợp với chú thích
@Query["{'active':true}"]
List findAll[];
@Query["{'author' : ?0, 'category' : ?1}"]
List findPositionalParameters[String author, String category];
@Query["{'author' : :#{#author}, 'category' : :#{#category}}"]
List findNamedParameters[@Param["author"] String author, @Param["category"] String category];
1 và biểu thức SpEL, dài dòng hơn nhưng linh hoạt hơn hoặc thông qua các đối số vị trí, đây thường là cách tiếp cận được ưa thích do tính đơn giảnfind using query:
{ "author" : "Max Tegmark"}
fields: Document{{}}
for class:
class com.example.demo.Book in collection: books
3Trong cách tiếp cận đầu tiên, đối số vị trí đầu tiên,
@Query["{'active':true}"]
List findAll[];
@Query["{'author' : ?0, 'category' : ?1}"]
List findPositionalParameters[String author, String category];
@Query["{'author' : :#{#author}, 'category' : :#{#category}}"]
List findNamedParameters[@Param["author"] String author, @Param["category"] String category];
2, tương ứng với đối số đầu tiên trong phương thức và giá trị của đối số sẽ được sử dụng thay vì @Query["{'active':true}"]
List findAll[];
@Query["{'author' : ?0, 'category' : ?1}"]
List findPositionalParameters[String author, String category];
@Query["{'author' : :#{#author}, 'category' : :#{#category}}"]
List findNamedParameters[@Param["author"] String author, @Param["category"] String category];
2. Điều này có nghĩa là bạn phải theo dõi các vị trí và không trộn lẫn chúng, nếu không, MongoDB sẽ âm thầm thất bại và không trả về kết quả, do tính linh hoạt của lược đồ, vì bạn cũng có thể có thuộc tính đóMẹo. Nếu bạn đã bật
public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
7 làm cấp độ ghi nhật ký của mình - bạn sẽ có thể xem truy vấn được gửi tới Mongo trong nhật ký. Bạn có thể sao chép-dán truy vấn đó vào MongoDB Atlas để kiểm tra xem truy vấn có trả về kết quả chính xác ở đó hay không và xác minh xem bạn có vô tình làm sai vị trí hay không. Rất có thể - truy vấn của bạn vẫn ổn, nhưng bạn vừa trộn các vị trí nên kết quả là trốngTrong cách tiếp cận thứ hai, chúng tôi đang sử dụng các biểu thức SpEL để khớp các tham số được cung cấp với các tham số
public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
8. Bạn không cần phải xác định chúng theo bất kỳ thứ tự cụ thể nào vì chúng sẽ được khớp theo tên - không phải theo vị trí. Mặc dù vậy, vẫn nên giữ một vị trí thống nhất cho khả năng đọc APIHãy xác định một điểm cuối đơn giản trong bộ điều khiển REST để kiểm tra phương thức này
find using query:
{ "author" : "Max Tegmark"}
fields: Document{{}}
for class:
class com.example.demo.Book in collection: books
4Sau khi thiết lập, hãy gửi yêu cầu
@Query["{'active':true}"]
List findAll[];
@Query["{'author' : ?0, 'category' : ?1}"]
List findPositionalParameters[String author, String category];
@Query["{'author' : :#{#author}, 'category' : :#{#category}}"]
List findNamedParameters[@Param["author"] String author, @Param["category"] String category];
6 [hoặc điều hướng đến URL này qua trình duyệt]find using query:
{ "author" : "Max Tegmark"}
fields: Document{{}}
for class:
class com.example.demo.Book in collection: books
5Ghi chú. Để có câu trả lời rõ ràng, hãy nhớ chuyển
@Query["{'active':true}"]
List findAll[];
@Query["{'author' : ?0, 'category' : ?1}"]
List findPositionalParameters[String author, String category];
@Query["{'author' : :#{#author}, 'category' : :#{#category}}"]
List findNamedParameters[@Param["author"] String author, @Param["category"] String category];
7 của Jackson thành @Query["{'active':true}"]
List findAll[];
@Query["{'author' : ?0, 'category' : ?1}"]
List findPositionalParameters[String author, String category];
@Query["{'author' : :#{#author}, 'category' : :#{#category}}"]
List findNamedParameters[@Param["author"] String author, @Param["category"] String category];
8 trong @Query["{'active':true}"]
List findAll[];
@Query["{'author' : ?0, 'category' : ?1}"]
List findPositionalParameters[String author, String category];
@Query["{'author' : :#{#author}, 'category' : :#{#category}}"]
List findNamedParameters[@Param["author"] String author, @Param["category"] String category];
9 của bạnfind using query:
{ "author" : "Max Tegmark"}
fields: Document{{}}
for class:
class com.example.demo.Book in collection: books
6Phân trang kết quả với Page và Pageable
Sắp xếp và phân trang được hỗ trợ ngay lập tức, vì
logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
6 mở rộng public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
1. Như thường lệ, quy trình sẽ trả về một loại {query}
2 và cung cấp một {query}
3 cho chính phương thức đófind using query:
{ "author" : "Max Tegmark"}
fields: Document{{}}
for class:
class com.example.demo.Book in collection: books
7Khi gọi phương thức, bạn cần cung cấp đối tượng
{query}
3 hợp lệ, đối tượng này có thể được tạo bằng cách thực hiện yêu cầu trangỞ đây, chúng tôi đang tạo một
{query}
5 cho trang đầu tiên [lập chỉ mục dựa trên 0] với kích thước của tài liệu {query}
6. Nếu có 10 tài liệu phù hợp trong cơ sở dữ liệu, 5 trang sẽ được trả về, từ {query}
7. Bạn phải tạoHãy in ra toàn bộ đối tượng
{query}
2 đã quay lại, trong đó {query}
9 chứa kết quả của truy vấn và một số thuộc tính khác cũng có liên quan đến trang. Đây là nơi bạn có thể xem kết quả được sắp xếp như thế nào trong trang - i. e. sắp xếp, kích thước trang, số trang, v.v.find using query:
{ "author" : "Max Tegmark"}
fields: Document{{}}
for class:
class com.example.demo.Book in collection: books
8Nếu bạn chỉ muốn hiển thị kết quả, bạn có thể truy cập
{
: ,
: ,
..
}
0 dữ liệu và {
: ,
: ,
..
}
1 nó vào danh sáchfind using query:
{ "author" : "Max Tegmark"}
fields: Document{{}}
for class:
class com.example.demo.Book in collection: books
9Để mở rộng chức năng này với tính năng sắp xếp, tất cả những gì bạn phải làm là cung cấp một đối tượng
{
: ,
: ,
..
}
2 cho {query}
5, cho biết bạn muốn sắp xếp theo thuộc tính nào và theo thứ tự nàologging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
0Ở đây, chúng tôi đã sắp xếp kết quả theo tên tăng dần và số trang tăng dần. Khi sắp xếp qua nhiều thuộc tính, bạn có thể xâu chuỗi bất kỳ số lượng thuộc tính nào thông qua
{
: ,
: ,
..
}
4 và cung cấp một {
: ,
: ,
..
}
5 khácPhương thức
{
: ,
: ,
..
}
6 là một phương thức mặc định có trong giao diện logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
6 và chấp nhận cả hai phiên bản {
: ,
: ,
..
}
2 và {query}
3 và cũng có thể chạy mà không có chúng. Ở đây, chúng tôi đã tận dụng điều đó để truy vấn bằng cách sử dụng {query}
3 mớilogging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
1Thuộc tính đầu tiên được ưu tiên ở đây. Mặc dù cuốn sách thứ hai có ít trang hơn cuốn đầu tiên và chúng tôi đã sắp xếp theo số trang tăng dần, việc sắp xếp theo tên sẽ cho kết quả theo thứ tự này. Nếu thứ tự theo tên không rõ ràng, thuộc tính thứ hai sẽ bị cắt
Truy vấn với người vận hành
Tất cả những gì đang được nói, hãy tạo lại truy vấn từ đầu bài viết
find using query:
{ "author" : "Max Tegmark"}
fields: Document{{}}
for class:
class com.example.demo.Book in collection: books
2Việc này dễ dàng như sao chép truy vấn này vào chú thích
public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
8. Biết rằng chúng ta có ba cuốn sách, cuốn đó dài 652 trang và một trong số đó đã được xuất bản vào năm 2019 - chúng ta chỉ nên mong đợi một cuốn sách duy nhất được trả lại ở đây - "Vũ trụ toán học của chúng ta" của Max TegmarkHãy kiểm tra xem điều đó có đúng không
logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
3Hoặc, để thực hiện sạch hơn
logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
4Ghi chú. Khi cung cấp các mảng dữ liệu, chẳng hạn như
find using query:
{ "author" : "Max Tegmark"}
fields: Document{{}}
for class:
class com.example.demo.Book in collection: books
02 và find using query:
{ "author" : "Max Tegmark"}
fields: Document{{}}
for class:
class com.example.demo.Book in collection: books
03 - không cần xác định tham số là mảng trong truy vấn - find using query:
{ "author" : "Max Tegmark"}
fields: Document{{}}
for class:
class com.example.demo.Book in collection: books
04. Điều này sẽ tạo ra một mảng trong một mảng. Chú thích public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
8 sẽ tự động chuyển đổi đầu vào của bạn thành truy vấn phù hợpHãy cập nhật điểm cuối và cung cấp một số dữ liệu
Và khi chúng tôi gửi yêu cầu đến nó
logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
5Giống như đồng hồ
Phần kết luận
Trong hướng dẫn này, chúng ta đã xem xét chú thích
public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
8 trong ngữ cảnh Spring Data MongoDBChú thích cho phép bạn xác định các truy vấn của riêng mình, gốc và JPQL, cho các cơ sở dữ liệu khác nhau, quan hệ và không quan hệ. Chúng tôi đã chọn sử dụng truy vấn gốc Mongo để tương tác với cơ sở dữ liệu không liên quan. Sau khi xác định một mô hình và một kho lưu trữ cho nó, chúng ta đã khám phá cấu trúc truy vấn được MongoDB sử dụng và cách thức hoạt động của chú thích
public interface PropertyRepository extends MongoRepository {
List findPropertiesByTransactionTypeAndPropertyType[@Param["transaction_type"] TransactionType transactionType, @Param["property_type"] PropertyType propertyType];
}
8 nói chung. Tiếp theo là tham khảo các tham số phương thức được đặt tên và vị trí, phân trang và sắp xếp kết quả truy vấn, cũng như cách sử dụng các toán tử MongoDB để xây dựng các truy vấn phức tạp hơn