不使用分页插件进行分页

目录

一.分页的好处:

二.分页的方式:

三.分页示例: 


一.分页的好处:

  1. 提高性能,减少内存的压力(减低宽带使用,提高访问速度),一次查20个,比一次查20000个性能肯定更好;另外如果数据量很大,一次性将内容都查询出来,查询出来的结果是放在内存里面的,内存没有这么大

  2. 根据用户的需要,提供适当的数据。如新闻,一般人可能只看最近前20条;如果我们将后面的也都查询出来了,就是浪费

  3. 查询效率快,因为只显示每页的条数,而不是把所有的数据加载出来,另外页面好看,比如几十
    万的数据,你不分页会把页面撑爆

二.分页的方式:

  1. 逻辑分页:在用户第一次访问时,将数据库的所有记录全部查询出来,添加到一个大集合中,然后存放在session对象,再通过页码计算出当前页需要显示的数据内容,存储到一个小的list的集合中,并将其存储到request对象中,跳转到JSP页面,进行遍历显示。 当用户第二次访问时,只要不关闭浏览器,还会从session中获取数据,来进行显示。因为此种方法是在内存的session对象中进行计算分页显示的,而不是真正的将我们数据库进行分页的,所以叫做逻辑分页。
    缺点:如果需要查询的数据量过大,session将耗费大量的内存;因为是在session中获取数据,如果第二次或者更多此的不关闭浏览器访问,会直接访问session,从而不能保证数据是最新的。
    优点:统一代码处理方式,较容易跨数据库做迁移。

  2. 物理分页:使用数据库自身所带的分页机制,例如,Mysql数据库中的limit等机制来完成分页操作。因为是对数据库的数据进行分页条件查询,所以叫物理分页。每一次物理分页都会去连接数据库。

    优点:数据能够保证最新,由于根据分页条件会查询出少量的数据,所以不会占用太多的内存。

三.分页示例(mysql数据库): 

  1. 准备一个表格数据结果对象类,里面有三个属性:
@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);

 
 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值