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的操作,上一 ...
随机推荐
- junit4X系列--Exception
原文出处:http://www.blogjava.net/DLevin/archive/2012/11/02/390684.html.感谢作者的无私分享. 说来惭愧,虽然之前已经看过JUnit的源码了 ...
- Linux上常用软件安装和总结
Linux总结: 以前只顾着撸码,Linux这些一般都是运维玩的,然后也没怎么折腾过,每次上线也都只是发布下,最多也就是启停服务器.最近闲来无事就玩了玩Linux,还挺好的. 这里做一个总结来结束Li ...
- 基于百度地图SDK和Elasticsearch GEO查询的地理围栏分析系统(3)-前端实现
转载自:http://www.cnblogs.com/Auyuer/p/8086975.html MoonLight可视化订单需求区域分析系统实现功能: 在现实生活中,计算机和互联网迅速发展,人们越来 ...
- 面向对象之原型——challenge
面向对象之原型 object-oriented面向对象的设计,不同于其他语言,js中的面向对象没有类的概念,因此,其对象也有些特殊. 所谓对象就是无序属性的集合,其属性可以包含基本值.对象.函数.也就 ...
- JS 中的this指向问题和call、apply、bind的区别
this的指向问题 一般情况下this对象指向调用函数的对象,全局环境中执行函数this对象指向window. function a(){ console.log(this); //输出函数a中的th ...
- 为什么.Net平台不支持程序集卸载(Assembly.Unload)?
我们知道在.net平台中反射提供了在运行时动态的获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象.我们知道 ...
- Java解决CSRF问题
项目地址: https://github.com/morethink/web-security-csrf CSRF是什么? CSRF(Cross-site request forgery),中文名称: ...
- SDP(4):ScalikeJDBC- JDBC-Engine:Updating
在上一篇博文里我们把JDBC-Engine的读取操作部分分离出来进行了讨论,在这篇准备把更新Update部分功能介绍一下.当然,JDBC-Engine的功能是基于ScalikeJDBC的,所有的操作和 ...
- MySQL用户授权与权限
MySQL权限如下表 权限名字 权限说明 Context CREATE 允许创建新的数据库和表 Databases, tables, or indexes DROP 允许删除现有数据库.表和视图 Da ...
- Go基础之--反射
反射:可以在运行时动态获取变量的相关信息 反射需要导入reflect 反射中重要函数的演示 反射有几下几个重要的函数:reflect.TypeOf :获取变量的类型,返回reflect.Type类型r ...