MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Kueri dinamis MongoRepository

Di bawah ini adalah solusi yang saya buat. Jadi hanya untuk rekap, masalah yang saya miliki, adalah bahwa saya tidak dapat menjalankan kueri yang diberikan objek Kueri sebagai input untuk meningkatkan fleksibilitas atas kriteria pemfilteran. Solusinya ternyata cukup sederhana, saya hanya perlu membaca dokumentasi dengan cermat :).

  1. langkah

Perluas MongoRepository dan tambahkan fungsi khusus Anda:

@NoRepositoryBean
public interface ResourceRepository<T, I extends Serializable> extends MongoRepository<T, I> {

    Page<T> findAll(Query query, Pageable pageable);
}
  1. langkah

Buat implementasi untuk antarmuka ini:

public class ResourceRepositoryImpl<T, I extends Serializable> extends SimpleMongoRepository<T, I> implements ResourceRepository<T, I> {

    private MongoOperations mongoOperations;
    private MongoEntityInformation entityInformation;

    public ResourceRepositoryImpl(final MongoEntityInformation entityInformation, final MongoOperations mongoOperations) {
        super(entityInformation, mongoOperations);

        this.entityInformation = entityInformation;
        this.mongoOperations = mongoOperations;
    }

    @Override
    public Page<T> findAll(final Query query, final Pageable pageable) {
        Assert.notNull(query, "Query must not be null!");

        return new PageImpl<T>(
                mongoOperations.find(query.with(pageable), entityInformation.getJavaType(), entityInformation.getCollectionName()),
                pageable,
                mongoOperations.count(query, entityInformation.getJavaType(), entityInformation.getCollectionName())
        );
    }
}
  1. langkah

Tetapkan implementasi Anda sebagai implementasi MongoRepository default:

@EnableMongoRepositories(repositoryBaseClass = ResourceRepositoryImpl.class)
public class MySpringApplication {
    public static void main(final String[] args) {
        SpringApplication.run(MySpringApplication.class, args);
    }
}
  1. langkah

Buat repositori untuk objek kustom Anda:

public interface CustomObjectRepo extends ResourceRepository<CustomObject, String> {
}

Sekarang jika Anda memiliki banyak objek yang ingin Anda simpan di penyimpanan dokumen mongo, cukup dengan mendefinisikan antarmuka yang memperluas ResourceRepository Anda (seperti yang terlihat pada langkah 4), dan Anda akan memiliki Page<T> findAll(Query query, Pageable pageable) metode kueri khusus. Saya menemukan solusi ini sebagai solusi paling elegan yang pernah saya coba.

Jika Anda memiliki saran untuk perbaikan, silakan bagikan dengan komunitas.

Salam, Cristian



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongoDB/luwak:unik jika bukan nol

  2. Bagaimana menangani hubungan saat menggunakan mongodb

  3. Dasar antara kueri tanggal $gte, $lte, dll

  4. MongoDB 3 Java memeriksa apakah ada koleksi

  5. Kesalahan Mongod:98 Tidak dapat mengunci file:/data/db/mongod.lock Sumber daya tidak tersedia untuk sementara. Apakah instance mongod sudah berjalan?