java中page和pageinfo两个类的区别
时间: 2023-09-14 13:03:39 浏览: 156
Page和PageInfo都是MyBatis框架中分页查询的常用类。其中,Page类是基于RowBounds实现的分页,而PageInfo类是基于物理分页,即通过SQL语句limit关键字实现的分页。Page类的使用比较灵活,可以自定义查询起始位置和返回数量;而PageInfo类则直接指定页码和每页数量,可以更方便地实现分页查询。
相关问题
Java PageInfo手动对list进行分页
在Java中对list进行分页,可以通过对list进行切片(slice)来实现。下面是一个示例代码,可以将一个list按照指定的每页数量进行分页:
```java
public class Paginator<T> {
private List<T> items;
private int pageSize;
public Paginator(List<T> items, int pageSize) {
this.items = items;
this.pageSize = pageSize;
}
public List<T> getPage(int pageNumber) {
int startIndex = (pageNumber - 1) * pageSize;
int endIndex = Math.min(startIndex + pageSize, items.size());
return items.subList(startIndex, endIndex);
}
public int getTotalPages() {
return (int) Math.ceil((double) items.size() / pageSize);
}
}
```
这个类接受两个参数:一个是要分页的list,另一个是每页的数量。它提供了两个方法:getPage用于获取指定页数的分页后的list,getTotalPages用于获取总页数。
例如,假设有一个包含10个整数的list,需要每页分页3个,可以使用以下代码进行分页:
```java
List<Integer> items = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int pageSize = 3;
Paginator<Integer> paginator = new Paginator<>(items, pageSize);
for (int i = 1; i <= paginator.getTotalPages(); i++) {
List<Integer> pageItems = paginator.getPage(i);
System.out.println(pageItems);
}
```
这个代码会输出:
```
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10]
```
注意,这个类并没有改变原始的list,而是返回了一个新的分页后的list。如果你需要在原始list上进行分页,可以使用类似`items.subList(startIndex, endIndex).clear(); items.addAll(startIndex, newItems);`的语法来替换原始的list的对应部分。
使用Java编写下面的语句 第一个方法是queryById,接收一个整型id作为参数,返回一个MessageData对象。在方法内部,使用tMessageMapper的queryById方法查询对应id的信息,并将查询结果构建成一个成功的MessageData对象返回。 第二个方法是queryByPage,接收一个Map参数和两个整型参数pageNum和pageSize,返回一个MessageData对象。在方法内部,首先对pageNum和pageSize进行判断,如果小于1则将其设置为默认值1和10。然后使用PageHelper进行分页处理,并使用tMessageMapper的queryByPage方法查询分页后的结果。最后将查询结果封装成一个PageInfo对象,并将其构建成一个成功的MessageData对象返回。
下面是Java代码实现:
```java
@Override
public MessageData queryById(Integer id) {
TMessage message = tMessageMapper.queryById(id);
if (message != null) {
return MessageData.buildSuccess(message);
} else {
return MessageData.buildError("查询失败");
}
}
@Override
public MessageData queryByPage(Map<String,Object> parameter, Integer pageNum, Integer pageSize) {
if (pageNum < 1) {
pageNum = 1;
}
if (pageSize < 1) {
pageSize = 10;
}
PageHelper.startPage(pageNum, pageSize);
List<TMessage> pageResult = tMessageMapper.queryByPage(parameter);
PageInfo<TMessage> pageInfo = new PageInfo<>(pageResult);
return MessageData.buildSuccess(pageInfo);
}
```
其中,queryById方法中,当查询结果不为空时,使用MessageData.buildSuccess方法将结果构建成成功的MessageData对象返回,否则返回一个包含错误信息的MessageData对象。
queryByPage方法中,首先对pageNum和pageSize进行判断,然后使用PageHelper进行分页处理,查询分页后的结果。最后将查询结果封装成PageInfo对象,并使用MessageData.buildSuccess方法将其构建成成功的MessageData对象返回。
阅读全文