MongoRepository的多条件查询和排序功能

继承MongoRepository也太香了吧

mongonDB作为非关系型数据库
是非关系数据库当中功能最丰富,最像关系数据库的。因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,而且还支持对数据建立索引,分页查询、多条件查询和排序功能这都不是问题。
不光香,还能造!能够减轻数据库的压力,提高系统性能.
首先直接上依赖

  
            org.springframework.boot
            spring-boot-starter-data-mongodb
            2.1.6.RELEASE
        

springBoot的yml配置
option是设置超时时间,跟,不喜欢这么多的 可以删掉,假如报错再贴上去吧哈哈

spring:
  data:
    mongodb:
      uri: mongodb://账号:密码@服务器名称:27017
      database: 集合名称(库名)
      option:
        min-connection-per-host: 20
        max-connection-per-host: 200
        threads-allowed-to-block-for-connection-multiplier: 5
        server-selection-timeout: 30000
        max-wait-time: 120000
        max-connection-idle-time: 0
        max-connection-life-time: 0
        connect-timeout: 20000
        socket-timeout: 0
        socket-keep-alive: false
        ssl-enabled: false
        ssl-invalid-host-name-allowed: false
        always-use-m-beans: false
        heartbeat-socket-timeout: 20000
        heartbeat-connect-timeout: 20000
        min-heartbeat-frequency: 500
        heartbeat-frequency: 10000
        local-threshold: 15

是前辈留给我们的好产物,一定要放心使用。
创建接口继承我们的MongoRepository

public interface AutomationBWHWebRepository extends MongoRepository<实体类名,主键id> {
}

实体类 @Doucment(collection="")是映射到的表名 上边的是Lombok


@Data
@ToString
@Document(collection = "mongoDB表明")
public class AutomationBWHWeb {
	//mongoDb上的主键
    @Id
    private String Id;

路铺好了 直接上内容代码了

package org.springframework.data.repository.query;

import java.util.Optional;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

public interface QueryByExampleExecutor {
     Optional findOne(Example var1);

     Iterable findAll(Example var1);

     Iterable findAll(Example var1, Sort var2);
	
     Page findAll(Example var1, Pageable var2);

     long count(Example var1);

     boolean exists(Example var1);
}

贴出MongoRepository的findAll()查询源码,随机选用一条 那就是它把
Page findAll(Example var1, Pageable var2)
Example是自行封装的查询条件 下边有介绍 ,而这个Pageable 我们再看看源码,需要的是什么参数。 贴得不是很全,建议大家在编译器中去好好看看。

算了 我挺难的,全部贴出来可能会脑瓜子嗡嗡的。
PageRequest是继承了AbstractPageRequest又实现了 Pageable所以!我们可以用这个对象

	//静态构造方法   分页加时间排序的功能,Sort也就是我们根据字段排序的一个条件
    public static PageRequest of(int page, int size, Sort sort) {
        return new PageRequest(page, size, sort);
    }

最后最后!!正题!

//参数参数条件
public QueryResult findHospitalH5(Map queryPageRequest) {
        int page = Integer.parseInt(queryPageRequest.get("currentPage"));
        int size = Integer.parseInt(queryPageRequest.get("pageSize"));
        String hospitalName = queryPageRequest.get("hospitalName");
        String remark = queryPageRequest.get("remark");

        //创建查询条件对象
        ExampleMatcher exampleMatcher = ExampleMatcher.matching().
        		//remark表示查询字段名称
                withMatcher("remark", ExampleMatcher.GenericPropertyMatchers.contains()).
                withMatcher("hospitalName", 
                //ExampleMatcher.GenericPropertyMatchers.contains()表示包含的意思还需要更多需求的,文章下方有其余方法,包括结尾是,全匹配等
                ExampleMatcher.GenericPropertyMatchers.contains());
         //创建实体类      
        AutomationBWHH5 information = new AutomationBWHH5();
        //将所需要条件查询的值set到实体类中
        if (!StringUtils.isEmpty(hospitalName)) {
            information.setHospitalName(hospitalName);
        }
        if (!StringUtils.isEmpty(remark)) {
            information.setRemark(remark);
        }
		//缝合条件
        Example example = Example.of(information, exampleMatcher);
		//设置分页,这里page页码是不允许为0的
        if (page <= 0) {
            page = 1;
        }
        if (size == 0) {
            size = 10;
        }
        //???假如觉得麻烦,按照自己需求来 哈哈哈
        page = page - 1;
       
        //Sort.Direction.DESC  这里是按照集合表里边的sortDate字段进行正向排序,我的是在实体类中设置的字段为Date
        Sort sort = new Sort(Sort.Direction.DESC,"sortDate");
         //分页查询
        Pageable pageable = new PageRequest(page, size,sort);
		
        Page requestPage = automationBWHH5Repository.findAll(example, pageable);
        QueryResult queryResult = new QueryResult();
        queryResult.setTotal(requestPage.getTotalElements());
        queryResult.setList(requestPage.getContent());
        return queryResult;
    }

ExampleMatcher.GenericPropertyMatchers.->
MongoRepository的多条件查询和排序功能_第1张图片
根据需要自行匹配。不恰当的地方,大佬批评指正!
MongoRepository的多条件查询和排序功能_第2张图片
觉得很香的小伙伴一定要告诉妈妈!

你可能感兴趣的:(案例,总结,Java)