„Pohodlné“ a „výkonné použití“ jsou do určité míry protichůdné cíle. Repozitáře jsou mnohem pohodlnější než šablony, ale ty druhé vám samozřejmě poskytují jemnější kontrolu nad tím, co se má spustit.
Protože programovací model úložiště je k dispozici pro více modulů Spring Data, najdete k němu podrobnější dokumentaci v obecné části referenčních dokumentů Spring Data MongoDB.
TL;DR
Obecně doporučujeme následující postup:
- Začněte abstraktem úložiště a deklarujte jednoduché dotazy pomocí mechanismu odvozování dotazů nebo ručně definovaných dotazů.
- U složitějších dotazů přidejte do úložiště ručně implementované metody (jak je zdokumentováno zde). Pro implementaci použijte
MongoTemplate
.
Podrobnosti
Pro váš příklad by to vypadalo nějak takto:
-
Definujte rozhraní pro svůj vlastní kód:
interface CustomUserRepository { List<User> yourCustomMethod(); }
-
Přidejte implementaci pro tuto třídu a postupujte podle konvence pojmenování, abyste se ujistili, že můžeme třídu najít.
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 } }
-
Nyní nechte rozhraní základního úložiště rozšířit to vlastní a infrastruktura automaticky použije vaši vlastní implementaci:
interface UserRepository extends CrudRepository<User, Long>, CustomUserRepository { }
Tímto způsobem v podstatě získáte možnost volby:vše, co lze snadno deklarovat, jde do UserRepository
, vše, co je lépe implementováno ručně, jde do CustomUserRepository
. Možnosti přizpůsobení jsou zdokumentovány zde.