zoukankan      html  css  js  c++  java
  • 通用分页(一)

    通用分页核心思路:
    将上一次查询请求再发一次,只是当前页变了而已。


    首页 1 2 3 4 … 100 末页 跳转

    MySQL分页:select * from 表 limit 3,3

     

    每页显示记录数      自己设置
    当前页          来自前端
    总页数          总记录数%每页显示记录数==0?总记录数/每页显示记录数:总记录数/每页显示记录数+1
    总记录数         数据库统计count()
    每页起始记录数      =(当前页-1)*每页显示记录数+1

    总共101条记录,每页显示10条
    第一页: 1-10
    第二页: 11-20
    第三页: 21-30

    每页结尾记录数      =当前页*每页显示记录数

    1、通用的查询方法代码实现

    导入jar包

    连接数据库之前查看自己的用户名、密码、数据库名是否正确

    isOracle:false
    isSQLServer:false
    isMysql:true
    数据库连接(关闭)成功
    #mysql
    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/db_book?useUnicode=true&characterEncoding=UTF-8
    user=root
    pwd=root

    BookDao.java

    
    

    package com.huangyucan.dao;

    
    

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;

    
    

    import com.huangyucan.entity.Book;
    import com.huangyucan.util.BaseDao;
    import com.huangyucan.util.DBAccess;
    import com.huangyucan.util.PageBean;
    import com.huangyucan.util.StringUtils;

    
    

    public class BookDao extends BaseDao<Book>{
    /**
    *
    * @param book 封装jsp传递过来的查询参数
    * @param pagebean 决定dao层的list调用时是否分页
    * @return
    * @throws SQLException
    * @throws IllegalAccessException
    * @throws InstantiationException
    */

    
    



    public List<Book> list(Book book,PageBean pageBean) throws SQLException, InstantiationException, IllegalAccessException{
    String sql="select *from t_mvc_book where true";
    String bname=book.getBname();
    if(StringUtils.isNotBlank(bname)) {
    sql+="and bname like '%"+bname+"%'";
    }
    return super.executeQuery(sql, Book.class, pageBean);
    }

    
    

    public static void main(String[] args) {
    BookDao bookDao=new BookDao();
    Book book=new Book();
    book.setBname("圣");
    PageBean pageBean=new PageBean();
    // pageBean.setPage(2);
    // pageBean.setPagination(false);
    try {
    List<Book> list = bookDao.list(book, pageBean);
    for (Book b : list) {
    System.out.println(b);
    }
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (InstantiationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    }

     

    BaseDao.java

    
    

    package com.huangyucan.util;

    
    

    import java.lang.reflect.Field;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;

    
    

    import com.huangyucan.entity.Book;

    
    

    public class BaseDao<T> {
    /**
    * 借鉴ajax的回调函数现象
    * 在调用方去处理返回的结果集
    * @author Administrator
    */

    public List<T> executeQuery(String sql, Class clz,PageBean pageBean) throws SQLException, InstantiationException, IllegalAccessException{
    Connection con = DBAccess.getConnection();
    PreparedStatement pst = null;
    ResultSet rs =null;

    if(pageBean!=null&&pageBean.isPagination()) {
    //需要分页
    //算符合条件的总记录数
    String countSql=getCountSql(sql);
    pst=con.prepareStatement(countSql);
    rs=pst.executeQuery();
    if(rs.next()) {
    pageBean.setTotal(rs.getLong(1)+"");
    }

    //算出符合条件的结果集
    String pageSql=getPageSql(sql, pageBean);
    pst=con.prepareStatement(pageSql);
    rs=pst.executeQuery();


    }
    else {
    pst=con.prepareStatement(sql);
    rs=pst.executeQuery();
    }
    List<T> list=new ArrayList<>();
    T t;
    while(rs.next()) {
    /**
    * 1、实例化一个book对象(该对象为空)
    * 2、取book的所有属性,然后给其赋值
    * 2.1获取所有属性对象
    * 2.2给属性对象赋值
    * 3、赋完值的book对象装进list容器中
    */
    t=(T) clz.newInstance();
    Field[] fields=clz.getDeclaredFields();
    for (Field field : fields) {
    field.setAccessible(true);
    field.set(t, rs.getObject(field.getName()));
    }
    list.add(t);
    }
    DBAccess.close(con, pst, rs);
    return list;
    }

    /**
    * 利用原生sql拼接出符合条件的结果集的查询sql
    * @param sql
    * @param pageBean
    * @return
    */
    private String getPageSql(String sql,PageBean pageBean) {
    return sql + " limit "+ pageBean.getStartIndex() +"," + pageBean.getRows();
    }

    /**
    * 获取符合条件的总记录数的sql语句
    * @param sql
    * @return
    */
    private String getCountSql(String sql) {
    return "select count(*) from ("+ sql +") t";
    }
    }

     

    分页工具类

    PageBase.java

    package com.huangyucan.util;
    
    /**
     * 分页工具类
     *
     */
    public class PageBean {
    
        private int page = 1;// 页码
    
        private int rows = 10;// 页大小
    
        private int total = 0;// 总记录数
    
        private boolean pagination = true;// 是否分页
    
        public PageBean() {
            super();
        }
    
        public int getPage() {
            return page;
        }
    
        public void setPage(int page) {
            this.page = page;
        }
    
        public int getRows() {
            return rows;
        }
    
        public void setRows(int rows) {
            this.rows = rows;
        }
    
        public int getTotal() {
            return total;
        }
    
        public void setTotal(int total) {
            this.total = total;
        }
    
        public void setTotal(String total) {
            this.total = Integer.parseInt(total);
        }
    
        public boolean isPagination() {
            return pagination;
        }
    
        public void setPagination(boolean pagination) {
            this.pagination = pagination;
        }
    
        /**
         * 获得起始记录的下标
         * 
         * @return
         */
        public int getStartIndex() {
            return (this.page - 1) * this.rows;
        }
    
        @Override
        public String toString() {
            return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]";
        }
    
    }
  • 相关阅读:
    跟结束进程相关的那些信号
    tcpdump使用示例
    Linux在bash history当中添加timestamp
    CentOS中在/etc/rc.local添加开机自启动项启动失败
    CentOS配置通过DHCP的方式动态获取IP
    CentOS桌面安装
    MySQL二进制安装
    对okhttp参数的一些思考
    依赖倒置原则(DIP)
    Liskov替换原则(LSP)
  • 原文地址:https://www.cnblogs.com/bf6rc9qu/p/11057860.html
Copyright © 2011-2022 走看看