springboot使用MongoRepository实现指定条件查询

1.编辑你的实体类

public class Message implements Serializable {

    private String id;
    private String fromId;
    private String toId;
    private String msg;
    private String sendNickname;
    private String toNickname;
    private String isRead;
    private Date createTime;
    
    get set方法...

2.编辑你的mapper,实现MongoRepository

@Repository
public interface MessageMapper extends MongoRepository<Message, String> {
}

记得加上注解@Repository

3.编辑你的service

@Service
public class MessageServiceImpl implements MessageService {

    @Autowired
    private MessageMapper messageMapper;

    @Override
    public Page<Message> getMsgList(String fromId, String toId, 
    					int pageNumber, int pageSize, String sort) {

		//此处是添加所要根据的条件
        Message message = new Message();
        message.setFromId(fromId);
        message.setToId(toId);

		//此处是根据指定条件精确查询
        ExampleMatcher matcher = ExampleMatcher
                .matching()
                .withMatcher("fromId", ExampleMatcher.GenericPropertyMatchers.contains())
                .withMatcher("toId", ExampleMatcher.GenericPropertyMatchers.contains());

        Example<Message> example = Example.of(message, matcher);
        
        if (pageNumber < 1) {
            pageNumber = 1;
        } else if (pageSize == 0) {
            pageSize = 20;
        }
		
		//编辑分页对象,此分页对象是我自己写的,实现了Pageable接口,具体代码放在下面了
        SpringDataPageable springDataPageable = new SpringDataPageable();
        springDataPageable.setPagenumber(pageNumber);
        springDataPageable.setPagesize(pageSize);

        Sort sort1;
        if (StringUtils.isEmpty(sort)) {
            sort1 = new Sort(Sort.Direction.DESC, "createTime");
        } else {
            sort1 = new Sort(Sort.Direction.ASC, "createTime");
        }
        springDataPageable.setSort(sort1);

        return messageMapper.findAll(example, springDataPageable);
    }
}

此处是根据fromId和toId两个条件精确查询的,精确查询是根据
ExampleMatcher.GenericPropertyMatchers.contains()此方法控制的。
也可以模糊查询,正则,判断以指定字符开头或结尾。
在这里插入图片描述

测试postman调用

{
    "content": [
        {
            "id": "9204bcb6d4c84cbcaad5bc73b836da6a",
            "fromId": "1",
            "toId": "2",
            "msg": "你在哪里?",
            "sendNickname": "老三",
            "toNickname": "",
            "isRead": "1",
            "createTime": "2019-08-26 15:05:42"
        },
        {
            "id": "0ae01c49d92a4dde8dd7dad85ccc70d9",
            "fromId": "1",
            "toId": "2",
            "msg": "你好",
            "sendNickname": "老三",
            "toNickname": "",
            "isRead": "1",
            "createTime": "2019-08-26 15:05:29"
        }
    ],
    "pageable": {
        "pagenumber": 1,
        "pagesize": 2,
        "sort": {
            "sorted": true,
            "unsorted": false
        },
        "offset": 0,
        "pageSize": 2,
        "pageNumber": 1,
        "paged": true,
        "unpaged": false
    },
    "totalPages": 2,
    "last": true,
    "totalElements": 3,
    "number": 1,
    "size": 2,
    "numberOfElements": 2,
    "sort": {
        "sorted": true,
        "unsorted": false
    },
    "first": false
}

完成。

附 分页对象的实现类

package cn.fws.im.pageable;


import java.io.Serializable;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;


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

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

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

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

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

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

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

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

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

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

有疑问可直接留言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章