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方法...
@Repository
public interface MessageMapper extends MongoRepository<Message, String> {
}
记得加上注解@Repository
@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()此方法控制的。
也可以模糊查询,正则,判断以指定字符开头或结尾。
{
"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;
}
}
有疑问可直接留言。