zoukankan      html  css  js  c++  java
  • MySql翻页查询

    分页查询在网页中随处可见,那原理是什么呢?下面简单介绍一下基于MySql数据库的limit实现方法。

    首先明确为什么要使用分页查询,因为数据庞大,查询不可能全部显示在页面上,如果全部显示在页面上,也会造成查询速度慢的情况,所以分页查询解决了①数据查询;②性能优化,等(其他问题欢迎补充)的问题。

    分页查询也分为真分页和假分页:

      真分页:基于数据库查出的数据直接分页显示,优点是改变数据库数据不会影响查询结果,缺点是速度稍慢。

      假分页:将所有数据查询出的数据,封装到list集合缓存中,表现层方法调用执行。由于将数据封装为集合放入了内存中,所以速度较快,但缺点是数据库改变后,会出现不匹配的情况。

      两种分页各有优缺点,小伙伴们视具体情况使用吧。

    下面要介绍的就是真分页的方法:

    1、建立JavaBean

    import java.io.Serializable;
    /**
     * 用户实体类
     * @author 
     *
     */
    public class UserBean implements Serializable {
        /**用户ID*/
        private int id;
        /**用户名字*/
        private String name;
        public UserBean() {
            
        }
        public UserBean(int id, String name) {
            this.id = id;
            this.name = name;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        
        @Override
        public String toString() {
            return "UserBean [id=" + id + ", name=" + name + "]";
        }
    
    }

    2、用于展示分页数据的JavaBean

    /**
     * 用于展示分页数据的JavaBean对象
     * @author
     *
     */
    
    import java.util.List;
    
    public class PagenationBean {
        /** 当前页数 */
        private Integer currPage;
        /** 总页数 */
        private Integer totalPage;
        /** 用于展示的table数据 */
        private List<UserBean> dataList;
    
        public Integer getCurrPage() {
            return currPage;
        }
    
        public void setCurrPage(Integer currPage) {
            this.currPage = currPage;
        }
    
        public Integer getTotalPage() {
            return totalPage;
        }
    
        public void setTotalPage(Integer totalPage) {
            this.totalPage = totalPage;
        }
    
        public List<StuBean> getDataList() {
            return dataList;
        }
    
        public void setDataList(List<StuBean> dataList) {
            this.dataList = dataList;
        }
    
    }

    3、dao层实现类

      @Override
        public int getTotalCount() { //计算总的数据条数
            this.setConnection();
            int totalCount = 0;
            try {
                ps = con.prepareStatement("select count(*) from t_user");
                rs = ps.executeQuery();
                if (rs.next()) {
                    totalCount = rs.getInt(1);
                }
            } catch (Exception e) {
    
                e.printStackTrace();
            } finally {
                this.closeConnection();
            }
            return totalCount;
        }
       @Override
       public List<UserBean> getUserListByStartIndex(int StartIndex) { //根据传入的limit第一位参数得到该参数后面的10条数据
            List<UserBean> userList = new ArrayList<>();
            UserBean userBean= null;
            this.setConnection();
            int totalCount = 0;
            try {
                ps = con.prepareStatement("select * from t_user limit ? , 10");
                ps.setInt(1, StartIndex);
                rs = ps.executeQuery();
                while (rs.next()) {
                    userBean= new StuBean();
                    userBean.setId(rs.getInt("id"));
                    userBean.setName(rs.getString("name"));
                    stuList.add(userBean);
                }
            } catch (Exception e) {
    
                e.printStackTrace();
            } finally {
                this.closeConnection();
            }        
            return userList;
        }    

    4、service层实现类

      private IUserDao isd = new UserDaoImpl();

      @Override
    public int getTotalPage() { //得到数据据条数 int totalCount = isd.getTotalCount(); //计算总页数公式 int totalPage = (totalCount + 10 -1)/10; return totalPage; }
      @Override
        public List<UserBean> getUserListByCurrPage(int currPage) {
            //通过当前页计算起始索引
            int StartIndex = (currPage - 1) * 10;
            List<UserBean> userList = isd.getStuListByStartIndex(StartIndex);
            return userList;
        }

    5、将查询出的数据放入页面展示就OK了。

    以上方法中,分页显示的是10条数据,计算分析如下:

       数据总条数:  totalCount

      每页显示条数: pageSize

      总页数:    totalPage

      起始索引    StartIndex

      当前页数    currPage

      总页计算公式:

         totalCount % pageSize

          如果余数为0 ——> totalPage=totalCount / pageSize

             如果余数不为0 ——> totalPage=totalCount / pageSize +1

        得出结论:totalPage = (totalCount + pageSize -1)/pageSize

    欢迎指正不足之处!


    The END

  • 相关阅读:
    一文说透 Spring 循环依赖问题
    git修改已经push的commit message
    Connection Timeout 和CommandTimeout
    mvc 当中 [ValidateAntiForgeryToken] 的作用及用法
    mvc 当中 [ValidateAntiForgeryToken] 的作用及用法
    asp.net mvc与asp.net core Ajax删除操作delete中带ValidateAntiForgeryToken实例
    VS2017秘钥
    Sql server 2008 R2 配置管理工具服务显示远程过程调用失败:0x800706be
    SQL Server 2008找不到SQL Server配置管理器的问题
    如何为SQL Server2008添加登录账户并配置权限
  • 原文地址:https://www.cnblogs.com/hpqbh/p/11839334.html
Copyright © 2011-2022 走看看