zoukankan      html  css  js  c++  java
  • 分页原理及实践

    常见的分页实现方式

    • 使用List接口的subList(int startIndex, int endIndex)方法实现分页
    • 直接使用数据库SQL语句实现分页
    • 使用hibernate等 框架实现跨数据库的分页

    使用SQL语句实现分页

    利用数据库自带的分页语法,使用分页语句,获取分页数据(理入MySQL数据库自带的limit关键字,Oracle中使用rownum关键字等)

    举例:从学生表(t_student)中查询出前十条数据

    MySQL查询语句:

    select * from t_student limit 0,10

    Oracle查询语句:子查询

    select * from
    ( select s.*,rownum rn from(select * from t_student) s where rownum <= 10 ) where rn >= 1

    使用hibernate等 框架实现跨数据库的分页

    创建Query或者Criteria对象,查询时,设置 firstResult (从第几条数据开始查)和 maxResults (一共查询多少条记录)属性

    String hql = "from Student";
    Query q = session.createQuery(hql);
    q.setFirstResult(0);
    q.setMaxResult(10);
    List list = q.list();
    实现方式 优点 缺点 适用场景
    subList 简单易用 效率低 无法按需批量获取数据
    SQL语句 简单直接、效率高 数据库兼容差 不要求数据库兼容
    Hibernate框架 面向对象、兼容性强 复杂查询性能低 兼容不同数据库

     项目实战

    以上主要包括几个部分:

    • 上面是根据学生姓名、性别查询功能
    • 中间是学生信息列表,包含查询出的学生信息
    • 左下部分是分页概述,包含有多少条记录、多少页、当前是第几页
    • 后面的是分页的几个操作,包括【首页】、【上一页】、【下一页】、【尾页】

    因为Java是面向对象语言,我们首先想想如何把它抽象为一个个对象!

    每条记录抽象为一个学生对象:

    左下角有一些分页的情况:

    完整表示出来为:

     数据库建表:

    MVC构架:

    项目结构:

     对所用到的数据实体建模:

    Student.java & Pager.java

    package com.model;
    
    import java.io.Serializable;
    
    public class Student implements Serializable{
        private static final long serialVersionUID = 237085339399857983L;
        private int id;
        private String stuName;
        private int gender;
        private int age;
        private String address;
        
        public Student() {
            super();
        }
        public Student(int id, String stuName, int gender, int age, String address) {
            super();
            this.id = id;
            this.stuName = stuName;
            this.gender = gender;
            this.age = age;
            this.address = address;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getStuName() {
            return stuName;
        }
        public void setStuName(String stuName) {
            this.stuName = stuName;
        }
        public int getGender() {
            return gender;
        }
        public void setGender(int gender) {
            this.gender = gender;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        public static long getSerialversionuid() {
            return serialVersionUID;
        }
        @Override
        public String toString() {
            return "Student [id=" + id + ", stuName=" + stuName + ", gender="
                    + gender + ", age=" + age + ", address=" + address + "]";
        }
        
        
        
    }
    Student.java
    package com.model;
    
    import java.io.Serializable;
    import java.util.List;
    
    public class Pager<T> implements Serializable{
        
        private static final long serialVersionUID = -3610609414268644601L;
        
        private int pageSize; //每页显示多少条记录
        private int currentPage; //当前第几页数据
        private int totalRecord; //一共多少条记录
        private int totalPage; //一共多少页记录
        private List<T> dataList; //要显示的数据
        
        public Pager() {
            super();
        }
    
        public Pager(int pageSize, int currentPage, int totalRecord, int totalPage,
                List<T> dataList) {
            super();
            this.pageSize = pageSize;
            this.currentPage = currentPage;
            this.totalRecord = totalRecord;
            this.totalPage = totalPage;
            this.dataList = dataList;
        }
    
        public int getPageSize() {
            return pageSize;
        }
    
        public void setPageSize(int pageSize) {
            this.pageSize = pageSize;
        }
    
        public int getCurrentPage() {
            return currentPage;
        }
    
        public void setCurrentPage(int currentPage) {
            this.currentPage = currentPage;
        }
    
        public int getTotalRecord() {
            return totalRecord;
        }
    
        public void setTotalRecord(int totalRecord) {
            this.totalRecord = totalRecord;
        }
    
        public int getTotalPage() {
            return totalPage;
        }
    
        public void setTotalPage(int totalPage) {
            this.totalPage = totalPage;
        }
    
        public List<T> getDataList() {
            return dataList;
        }
    
        public void setDataList(List<T> dataList) {
            this.dataList = dataList;
        }
    
        public static long getSerialversionuid() {
            return serialVersionUID;
        }
    
        @Override
        public String toString() {
            return "Pager [pageSize=" + pageSize + ", currentPage=" + currentPage
                    + ", totalRecord=" + totalRecord + ", totalPage=" + totalPage
                    + ", dataList=" + dataList + "]";
        }
        
    }
    Pager.java
  • 相关阅读:
    .NET CORE 3.1.5 跨域设置
    NET CORE WebAPI 搭建--基础搭建
    EF 表中中多次指定了列名解决办法
    .Net Core 3.1.2 区域路由配置【原创】
    浅谈DevOps
    阿里云服务器SQLSERVER 2019 远程服务器环境搭建【原创】【转载请注明出处】
    c# vs2019 Window服务搭建
    云服务器和域名的使用简历
    WAI-ARIA无障碍网页资料
    kendoUI toolbar kendoComboBox 使用
  • 原文地址:https://www.cnblogs.com/Roni-i/p/9976263.html
Copyright © 2011-2022 走看看