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;
}
}
有疑問可直接留言。