Spring data mongodb 替換 Repository 實現類,findAll 排除 字段


因文檔比較大,有時候findAll 不想返回所有數據.沒有找到默認的findAll 能夠include 或者 exclude 的方法,所以想辦法擴展一下實現類

query.fields().include()
query.fields().exclude()

調試結果 SimpleMongoRepository 為 MongoRepository 的默認實現類,那么繼承 SimpleMongoRepository 做一點修改 

/**
 * Created by laizhenwei on 2017/10/25
 */
public class MySimpleMongoRepository <T, ID extends Serializable> extends SimpleMongoRepository<T, ID> {
    private final MongoOperations mongoOperations;
    private final MongoEntityInformation<T, ID> entityInformation;


    public MySimpleMongoRepository(MongoEntityInformation<T, ID> metadata, MongoOperations mongoOperations) {
        super(metadata, mongoOperations);
        this.entityInformation = metadata;
        this.mongoOperations = mongoOperations;
    }

    public <S extends T> Page<S> findAll(final Example<S> example,final Query query, Pageable pageable) {
        Assert.notNull(example, "Sample must not be null!");
        query.addCriteria((new Criteria()).alike(example)).with(pageable);
        List<S> list = this.mongoOperations.find(query, example.getProbeType(), this.entityInformation.getCollectionName());
        return PageableExecutionUtils.getPage(list, pageable, () -> mongoOperations.count(query, example.getProbeType(),entityInformation.getCollectionName()));
    }
}

 

OrderInfoRepository

/**
 * Created by laizhenwei on 2017/10/25
 */
public interface OrderInfoRepository extends MongoRepository<OrderInfo,ObjectId> {
    
    Page<OrderInfo> findAll(final Example<OrderInfo> example, final Query query, Pageable pageable);
    
}

 

MongoConfig

/**
 * Created by laizhenwei on 2017/10/25
 */
@Configuration
@EnableMongoRepositories(basePackages = "com.example.mongo.Repository",repositoryBaseClass = MySimpleMongoRepository.class)
public class MongoConfig {
}

JunitTest

 @Test
    public void findPage(){
        ExampleMatcher matcher = ExampleMatcher.matching()
                .withMatcher("buyer", ExampleMatcher.GenericPropertyMatchers.exact())
                .withMatcher("phone",ExampleMatcher.GenericPropertyMatchers.exact())

        OrderInfo orderInfo = new OrderInfo();
        orderInfo.setBuyer("A君");
        orderInfo.setPhone("13422981024");

        Example<OrderInfo> example = Example.of(orderInfo,matcher);


        Query query = new Query();
        query.fields().include("orderInfo");
        Page<OrderInfo> page = orderInfoRepository.findAll(example,query,new PageRequest(0,10));
        List<OrderInfo> orderInfos = page.getContent();

        Assert.assertTrue(orderInfos.stream().filter(val->val.getPhone().equals("13422981024")).count()==1);

        System.out.println(orderInfos.size());
        System.out.println(orderInfos.get(0).getOrderDetails());
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM