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

有疑問可直接留言。

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