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());
}

Spring data mongodb 替换 Repository 实现类,findAll 排除 字段的更多相关文章
- 使用Spring Data Mongodb的MongoRepository类进行增删改查
Spring Data Mongodb提供一套快捷操作 mongodb的方法,创建Dao,继承MongoRepository,并指定实体类型和主键类型. public interface CmsPag ...
- Spring Data MongoDB 一:入门篇(环境搭建、简单的CRUD操作)
一.简介 Spring Data MongoDB 项目提供与MongoDB文档数据库的集成.Spring Data MongoDB POJO的关键功能区域为中心的模型与MongoDB的DBColle ...
- 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 ...
- Introduction to Spring Data MongoDB
Introduction to Spring Data MongoDB I just announced the new Spring 5 modules in REST With Spring: & ...
- Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)
Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简单介绍 Spring ...
- 如何在Spring Data MongoDB 中保存和查询动态字段
原文: https://stackoverflow.com/questions/46466562/how-to-save-and-query-dynamic-fields-in-spring-data ...
- 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南
1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...
- Spring data mongodb 聚合,投射,内嵌数组文档分页.
尽量别直接用 DBObject ,Spring data mongodb 的api 本来就没什么多大用处,如果还直接用 DBObject 那么还需要自己去解析结果,说动做个对象映射,累不累 Spri ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)
一.简单介绍 Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...
随机推荐
- Servlet和web服务器关系
前面的博客我详细的罗列了下Servlet的常用的类和接口,然后在前面的前面我类似tomcat模拟了一套web服务器,这里来做一个统一的整理,这样子可以更好的把握Servlet,也可以更好的了解下web ...
- 远程服务调用(RMI)
模块概念的引入,是本框架的一大优势,而跨JVM的远程服务调用则是另一个最有价值的功能. <本地服务调用>一文中我们讲解了跨模块间的服务调用可以是这样的: ServiceHelper.inv ...
- 机器学习-GBDT和XGboost
参考: 陈天奇slides : https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf Friedman GBDT 论文: htt ...
- iphone启动图UI切图尺寸对照保存
- 02_HTML5+CSS详解第一天
视频来源:麦子学院 讲师:朱朝兵 HTML5概念:HTML即超文本标记语言(HyperText Makeup Language),是一种语法简单,结构清晰的解释型文档,不同于其他编程语言. HTML5 ...
- TP手册学习第一天
调试执行的sql语句 User::get(1); echo User::getLastSql(); 方法直接返回当前的查询SQL而不执行fetchSql echo User::fetchSql()-& ...
- RChain总体架构图
RChain是我研究区块链依赖发现的和我最契合的(主要是用scala写的),在架构上吞吐率和扩展性也是最好,未来是真正有可能实现在它官网上宣称的能够承载facebook一样的规模,具有和visa一样的 ...
- shell中awk printf的用法
打印输出时,可能需要指定字段间的空格数,从而把列排整齐.在print函数中使用制表符并不能保证得到想要的输出,因此,可以用printf函数来格式化特别的输出. printf函数返回一个带格式的字符串给 ...
- html的标签
<a>:anchor 定义锚 <abbr>:abbreviation 定义缩写 <acronym>: 定义只取消首字母的缩写 <address>:定义地 ...
- 我的前端故事----关于前端数据&逻辑的思考
最近重构了一个项目,一个基于redux模型的react-native项目,目标是在混乱的代码中梳理出一个清晰的结构来,为了实现这个目标,首先需要对项目的结构做分层处理,将各个逻辑分离出来,这里我是基于 ...