"Thuận tiện" và "mạnh mẽ để sử dụng" đang mâu thuẫn với các mục tiêu ở một mức độ nào đó. Các kho lưu trữ thuận tiện hơn nhiều so với các mẫu nhưng tất nhiên, kho lưu trữ thứ hai cung cấp cho bạn khả năng kiểm soát chi tiết hơn đối với những gì cần thực thi.
Vì mô hình lập trình kho lưu trữ có sẵn cho nhiều mô-đun Dữ liệu mùa xuân, bạn sẽ tìm thấy tài liệu chuyên sâu hơn về mô hình này trong phần chung của tài liệu tham khảo Spring Data MongoDB.
TL; DR
Chúng tôi thường đề xuất cách tiếp cận sau:
- Bắt đầu với phần tóm tắt của kho lưu trữ và chỉ cần khai báo các truy vấn đơn giản bằng cơ chế dẫn xuất truy vấn hoặc các truy vấn được xác định theo cách thủ công.
- Đối với các truy vấn phức tạp hơn, hãy thêm các phương thức được triển khai thủ công vào kho lưu trữ (như được nêu ở đây). Để triển khai, hãy sử dụng
MongoTemplate
.
Chi tiết
Đối với ví dụ của bạn, nó sẽ giống như sau:
-
Xác định giao diện cho mã tùy chỉnh của bạn:
interface CustomUserRepository { List<User> yourCustomMethod(); }
-
Thêm một triển khai cho lớp này và tuân theo quy ước đặt tên để đảm bảo chúng ta có thể tìm thấy lớp.
class UserRepositoryImpl implements CustomUserRepository { private final MongoOperations operations; @Autowired public UserRepositoryImpl(MongoOperations operations) { Assert.notNull(operations, "MongoOperations must not be null!"); this.operations = operations; } public List<User> yourCustomMethod() { // custom implementation here } }
-
Bây giờ, hãy để giao diện kho lưu trữ cơ sở của bạn mở rộng giao diện tùy chỉnh và cơ sở hạ tầng sẽ tự động sử dụng triển khai tùy chỉnh của bạn:
interface UserRepository extends CrudRepository<User, Long>, CustomUserRepository { }
Bằng cách này, về cơ bản bạn sẽ có sự lựa chọn:mọi thứ dễ khai báo sẽ được đưa vào UserRepository
, mọi thứ được triển khai thủ công tốt hơn sẽ đi vào CustomUserRepository
. Các tùy chọn tùy chỉnh được ghi lại ở đây.