目录
一.分页的好处:
二.分页的方式:
三.分页示例:?
一.分页的好处:
-
提高性能,减少内存的压力(减低宽带使用,提高访问速度),一次查20个,比一次查20000个性能肯定更好;另外如果数据量很大,一次性将内容都查询出来,查询出来的结果是放在内存里面的,内存没有这么大 -
根据用户的需要,提供适当的数据。如新闻,一般人可能只看最近前20条;如果我们将后面的也都查询出来了,就是浪费 -
查询效率快,因为只显示每页的条数,而不是把所有的数据加载出来,另外页面好看,比如几十 万的数据,你不分页会把页面撑爆
二.分页的方式:
-
逻辑分页:在用户第一次访问时,将数据库的所有记录全部查询出来,添加到一个大集合中,然后存放在session对象,再通过页码计算出当前页需要显示的数据内容,存储到一个小的list的集合中,并将其存储到request对象中,跳转到JSP页面,进行遍历显示。 当用户第二次访问时,只要不关闭浏览器,还会从session中获取数据,来进行显示。因为此种方法是在内存的session对象中进行计算分页显示的,而不是真正的将我们数据库进行分页的,所以叫做逻辑分页。 缺点:如果需要查询的数据量过大,session将耗费大量的内存;因为是在session中获取数据,如果第二次或者更多此的不关闭浏览器访问,会直接访问session,从而不能保证数据是最新的。 优点:统一代码处理方式,较容易跨数据库做迁移。 -
物理分页:使用数据库自身所带的分页机制,例如,Mysql数据库中的limit等机制来完成分页操作。因为是对数据库的数据进行分页条件查询,所以叫物理分页。每一次物理分页都会去连接数据库。 优点:数据能够保证最新,由于根据分页条件会查询出少量的数据,所以不会占用太多的内存。
三.分页示例(mysql数据库):?
- 准备一个表格数据结果对象类,里面有三个属性:
@Data
public class TableResult<T> {
/**总记录数*/
private List<T> records;
/**总条数 */
private long totalCont;
/**总页数*/
private long pageCont;
public void setPageCont(Integer pageSize){
if(pageSize==null){
return;
}
if(totalCont % pageSize==0){
this.pageCont = totalCont/pageSize;
}else {
this.pageCont = totalCont/pageSize+1;
}
}
}
? ? 2. 准备一个分页类,传输参数的对象(Dto类)继承这个分页类就可以,相当于给传输类添加三个属性,前端进行赋值,里面有三个属性:
@Data
public class BaseDto {
/**当前页数,从第几页开始查询*/
private Integer pageNumber;
/**每页查询多少条数据*/
private Integer pageSize;
/**从第几条数据开始查*/
public Integer start;
public Integer getStart( ) {
if(pageNumber==null||pageSize==null){
return null;
}
return (pageNumber-1)*pageSize;
}
}
? 3. 将TableResult类的三个属性赋值后返回就可以分页 ?
/**获取预案信息原始分页*/
@Transactional(rollbackFor = Exception.class)
public TableResult<YaInformation> getYaInformationOrg(YaInformationDto yaInformationDto) {
TableResult<YaInformation> tableResult =new TableResult();
/**查询数据*/
List<YaInformation> yaInformations = yaInformationMapper.getYaInformationList(yaInformationDto);
/**查询总条数*/
Integer integer = yaInformationMapper.selectCount(null);
/**给tableResult赋值*/
tableResult.setRecords(yaInformations);
tableResult.setTotalCont(integer);
tableResult.setPageCont(yaInformationDto.getPageSize());
return tableResult;
}
? 4. 查询数据Mapper层代码: ?
@Select("select * from ya_information limit #{start},#{pageSize}")
List<YaInformation> getYaInformationList(YaInformationDto yaInformationDto);
? ?
|