因文档比较大,有时候findAll 不想返回所有数据.没有找到默认的findAll 能够include 或者 exclude 的方法,所以想办法扩展一下实现类

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

调试结果 SimpleMongoRepository 为 MongoRepository 的默认实现类,那么继承 SimpleMongoRepository 做一点修改

  1. /**
  2. * Created by laizhenwei on 2017/10/25
  3. */
  4. public class MySimpleMongoRepository <T, ID extends Serializable> extends SimpleMongoRepository<T, ID> {
  5. private final MongoOperations mongoOperations;
  6. private final MongoEntityInformation<T, ID> entityInformation;
  7.  
  8. public MySimpleMongoRepository(MongoEntityInformation<T, ID> metadata, MongoOperations mongoOperations) {
  9. super(metadata, mongoOperations);
  10. this.entityInformation = metadata;
  11. this.mongoOperations = mongoOperations;
  12. }
  13.  
  14. public <S extends T> Page<S> findAll(final Example<S> example,final Query query, Pageable pageable) {
  15. Assert.notNull(example, "Sample must not be null!");
  16. query.addCriteria((new Criteria()).alike(example)).with(pageable);
  17. List<S> list = this.mongoOperations.find(query, example.getProbeType(), this.entityInformation.getCollectionName());
  18. return PageableExecutionUtils.getPage(list, pageable, () -> mongoOperations.count(query, example.getProbeType(),entityInformation.getCollectionName()));
  19. }
  20. }

OrderInfoRepository

  1. /**
  2. * Created by laizhenwei on 2017/10/25
  3. */
  4. public interface OrderInfoRepository extends MongoRepository<OrderInfo,ObjectId> {
  5.  
  6. Page<OrderInfo> findAll(final Example<OrderInfo> example, final Query query, Pageable pageable);
  7.  
  8. }

MongoConfig

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

JunitTest

  1. @Test
  2. public void findPage(){
  3. ExampleMatcher matcher = ExampleMatcher.matching()
  4. .withMatcher("buyer", ExampleMatcher.GenericPropertyMatchers.exact())
  5. .withMatcher("phone",ExampleMatcher.GenericPropertyMatchers.exact())
  6.  
  7. OrderInfo orderInfo = new OrderInfo();
  8. orderInfo.setBuyer("A君");
  9. orderInfo.setPhone("13422981024");
  10.  
  11. Example<OrderInfo> example = Example.of(orderInfo,matcher);
  12.  
  13. Query query = new Query();
  14. query.fields().include("orderInfo");
  15. Page<OrderInfo> page = orderInfoRepository.findAll(example,query,new PageRequest(0,10));
  16. List<OrderInfo> orderInfos = page.getContent();
  17.  
  18. Assert.assertTrue(orderInfos.stream().filter(val->val.getPhone().equals("13422981024")).count()==1);
  19.  
  20. System.out.println(orderInfos.size());
  21. System.out.println(orderInfos.get(0).getOrderDetails());
  22. }

Spring data mongodb 替换 Repository 实现类,findAll 排除 字段的更多相关文章

  1. 使用Spring Data Mongodb的MongoRepository类进行增删改查

    Spring Data Mongodb提供一套快捷操作 mongodb的方法,创建Dao,继承MongoRepository,并指定实体类型和主键类型. public interface CmsPag ...

  2. Spring Data MongoDB 一:入门篇(环境搭建、简单的CRUD操作)

    一.简介 Spring Data  MongoDB 项目提供与MongoDB文档数据库的集成.Spring Data MongoDB POJO的关键功能区域为中心的模型与MongoDB的DBColle ...

  3. Spring Data MongoDB example with Spring MVC 3.2

    Spring Data MongoDB example with Spring MVC 3.2 Here is another example web application built with S ...

  4. Introduction to Spring Data MongoDB

    Introduction to Spring Data MongoDB I just announced the new Spring 5 modules in REST With Spring: & ...

  5. Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)

    Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简单介绍 Spring ...

  6. 如何在Spring Data MongoDB 中保存和查询动态字段

    原文: https://stackoverflow.com/questions/46466562/how-to-save-and-query-dynamic-fields-in-spring-data ...

  7. 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南

    1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...

  8. Spring data mongodb 聚合,投射,内嵌数组文档分页.

    尽量别直接用 DBObject  ,Spring data mongodb 的api 本来就没什么多大用处,如果还直接用 DBObject 那么还需要自己去解析结果,说动做个对象映射,累不累 Spri ...

  9. Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)

    一.简单介绍 Spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...

随机推荐

  1. junit4X系列--Exception

    原文出处:http://www.blogjava.net/DLevin/archive/2012/11/02/390684.html.感谢作者的无私分享. 说来惭愧,虽然之前已经看过JUnit的源码了 ...

  2. Linux上常用软件安装和总结

    Linux总结: 以前只顾着撸码,Linux这些一般都是运维玩的,然后也没怎么折腾过,每次上线也都只是发布下,最多也就是启停服务器.最近闲来无事就玩了玩Linux,还挺好的. 这里做一个总结来结束Li ...

  3. 基于百度地图SDK和Elasticsearch GEO查询的地理围栏分析系统(3)-前端实现

    转载自:http://www.cnblogs.com/Auyuer/p/8086975.html MoonLight可视化订单需求区域分析系统实现功能: 在现实生活中,计算机和互联网迅速发展,人们越来 ...

  4. 面向对象之原型——challenge

    面向对象之原型 object-oriented面向对象的设计,不同于其他语言,js中的面向对象没有类的概念,因此,其对象也有些特殊. 所谓对象就是无序属性的集合,其属性可以包含基本值.对象.函数.也就 ...

  5. JS 中的this指向问题和call、apply、bind的区别

    this的指向问题 一般情况下this对象指向调用函数的对象,全局环境中执行函数this对象指向window. function a(){ console.log(this); //输出函数a中的th ...

  6. 为什么.Net平台不支持程序集卸载(Assembly.Unload)?

    我们知道在.net平台中反射提供了在运行时动态的获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象.我们知道 ...

  7. Java解决CSRF问题

    项目地址: https://github.com/morethink/web-security-csrf CSRF是什么? CSRF(Cross-site request forgery),中文名称: ...

  8. SDP(4):ScalikeJDBC- JDBC-Engine:Updating

    在上一篇博文里我们把JDBC-Engine的读取操作部分分离出来进行了讨论,在这篇准备把更新Update部分功能介绍一下.当然,JDBC-Engine的功能是基于ScalikeJDBC的,所有的操作和 ...

  9. MySQL用户授权与权限

    MySQL权限如下表 权限名字 权限说明 Context CREATE 允许创建新的数据库和表 Databases, tables, or indexes DROP 允许删除现有数据库.表和视图 Da ...

  10. Go基础之--反射

    反射:可以在运行时动态获取变量的相关信息 反射需要导入reflect 反射中重要函数的演示 反射有几下几个重要的函数:reflect.TypeOf :获取变量的类型,返回reflect.Type类型r ...