"Nyaman" dan "kuat untuk digunakan" adalah tujuan yang bertentangan sampai tingkat tertentu. Repositori jauh lebih nyaman daripada template tetapi yang terakhir tentu saja memberi Anda kontrol yang lebih baik atas apa yang harus dijalankan.
Karena model pemrograman repositori tersedia untuk beberapa modul Spring Data, Anda akan menemukan dokumentasi yang lebih mendalam untuknya di bagian umum dari dokumen referensi Spring Data MongoDB.
TL;DR
Kami biasanya merekomendasikan pendekatan berikut:
- Mulai dengan abstrak repositori dan cukup deklarasikan kueri sederhana menggunakan mekanisme derivasi kueri atau kueri yang ditentukan secara manual.
- Untuk kueri yang lebih kompleks, tambahkan metode yang diterapkan secara manual ke repositori (seperti yang didokumentasikan di sini). Untuk implementasinya gunakan
MongoTemplate
.
Detail
Untuk contoh Anda, ini akan terlihat seperti ini:
-
Tentukan antarmuka untuk kode khusus Anda:
interface CustomUserRepository { List<User> yourCustomMethod(); }
-
Tambahkan implementasi untuk kelas ini dan ikuti konvensi penamaan untuk memastikan kita dapat menemukan kelas tersebut.
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 } }
-
Sekarang biarkan antarmuka repositori dasar Anda memperluas yang khusus dan infrastruktur akan secara otomatis menggunakan implementasi khusus Anda:
interface UserRepository extends CrudRepository<User, Long>, CustomUserRepository { }
Dengan cara ini Anda pada dasarnya mendapatkan pilihan:semua yang mudah dideklarasikan masuk ke UserRepository
, semua yang lebih baik diterapkan secara manual masuk ke CustomUserRepository
. Opsi penyesuaian didokumentasikan di sini.