mongodb使用包含分页查询过滤多样性方法

1.配置yaml文件
在这里插入图片描述
mongodb://127.0.0.1:27017/pengyuyan中的pengyuyan是数据库名称
2.分页类SpringDataPageable

import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

import java.io.Serializable;

public class SpringDataPageable implements Serializable, Pageable {
	private static final long serialVersionUID = 1;
	// 当前页
	private Integer pagenumber = 1;
	// 当前页面条数
	private Integer pagesize = 1000;
	// 排序条件
	private Sort sort;

	// 当前页面
	@Override
	public int getPageNumber() {
		return getPagenumber();
	}

	// 每一页显示的条数
	@Override
	public int getPageSize() {
		return getPagesize();
	}

	// 第二页所需要增加的数量
	@Override
	public int getOffset() {
		return (getPagenumber() - 1) * getPagesize();
	}

	@Override
	public Sort getSort() {
		return sort;
	}

	public Integer getPagenumber() {
		return pagenumber;
	}

	public void setPagenumber(Integer pagenumber) {
		this.pagenumber = pagenumber;
	}

	public Integer getPagesize() {
		return pagesize;
	}

	public void setPagesize(Integer pagesize) {
		this.pagesize = pagesize;
	}

	public void setSort(Sort sort) {
		this.sort = sort;
	}

	@Override
	public Pageable first() {
		return null;
	}

	@Override
	public boolean hasPrevious() {
		return false;
	}

	@Override
	public Pageable next() {
		return null;
	}

	@Override
	public Pageable previousOrFirst() {
		return null;
	}
}

3.实体类sysuer

public class sysuser implements Serializable {

    private static final long serialVersionUID = -2363456220862690808L;
    private String id;
    private String username;
    private Integer age;

    public sysuser(String id, String username, Integer age) {
        this.id = id;
        this.username = username;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
public class UserMapper {

    @Autowired
    private MongoTemplate mongoTemplate;


    public Page<sysuser> findPage(Integer pageNum, Integer pagesize, Query query, Sort sort, Class collections, String collectionName) {

        SpringDataPageable pageable = new SpringDataPageable();
        // 开始页
        pageable.setPagenumber(pageNum);
        // 每页条数
        pageable.setPagesize(pagesize);
        // 排序
        pageable.setSort(sort);
        // 查询出一共的条数
        long count = mongoTemplate.count(query, collections, collectionName);
        // 查询
        List list = mongoTemplate.find(query.with(pageable), collections,collectionName );
        // 将集合与分页结果封装

        return new PageImpl<sysuser>(list, pageable, count);
    }

}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.tdcg.entity.sysuser;
import org.tdcg.repository.UserMapper;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/aaaa")
public class BaiController {

    @Autowired
    private UserMapper userMapper;

    @PostMapping("twooneplus")
    public void twooneplus() {
        Query query = new Query();
        //模糊查询username字段内容
        query.addCriteria(Criteria.where("username").regex("aaaa"));
        List<Sort.Order> list = new ArrayList<>();
        list.add(new Sort.Order(Sort.Direction.DESC,"username"));
        Sort sort = new Sort(list);
        Page<sysuser> passTime = userMapper.findPage(1,10, query, sort, sysuser.class,"sysuser");


    }
}

小总结:
name是表中字段,keyword是需要模糊查询的参数
Query query = Query.query(Criteria.where(“name”).regex(keyword));

Query.GT(“value”, 2);//大于>
Query.GTE(“value”, 3);//大于等于>=
Query.LT(“value”, 9);//小于<
Query.LTE(“value”, 8);//小于等于<=

问题:Spring-Data-Jpa的Sort排序时遇到的问题 has private access in ‘org.springframework.data.domain.Sort’

springboot2.2.1(含)以上的版本Sort已经不能再实例化了,构造方法已经是私有的了!
不能用List list = new List<>();
Sort sort = new Sort(list);了
可以使用Sort.by(Sort.Direction.DESC, “bookId”)这种形式替代sort对象
Sort.by()可以一个或多个字段排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值