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

  • 相关阅读:
    算法训练(大富翁)
    算法训练题(奖励最小)
    算法训练题
    乔布斯
    算法题(符合题意的6位数)
    算法题(八皇后)
    算法题(分小组)
    汉诺塔
    递归算法题(兔子)
    字符串-mask-每个元音包含偶数次的最长子字符串
  • 原文地址:https://www.cnblogs.com/sweetchildomine/p/7732766.html
Copyright © 2020-2023  润新知