• 通用分页(一)


    核心思路:将上一次 的查询请求再发送一次,这一次改变页码

    PageBean 

    private int page;  页数

    private int rows;   行数

    private boolean pagination; 是否分页

    private int total; 总行数;

    package com.page;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.List;
    
    import com.dao.impl.BaseDao;
    
    public class PageDao<E> extends BaseDao {
    	public List<Boolean> executeQueryPage(String sql, PageBean pageBean, ICallBack<E> iCallBack) {
    		Connection con = null;
    		PreparedStatement ps = null;
    		ResultSet rs = null;
    		try {
    			// 得到sql的总行数
    			con = getcon();
    			ps = con.prepareStatement(sql);
    			rs = ps.executeQuery();
    			pageBean.setTotal(rs.getString(1));
    			close(ps, rs);
    			// 调用分页sql语句
    			ps = con.prepareStatement(getPageSql(sql, pageBean));
    			rs = ps.executeQuery();
    			return (List<Boolean>) iCallBack.forEach(rs);
    		} catch (Exception e) {
    			throw new RuntimeException(e);
    		} finally {
    			close(con, ps, rs);
    		}
    
    	}
    
    	/**
    	 * 返回总行数
    	 * 
    	 * @param sql
    	 * @return
    	 */
    	private String getCountSql(String sql) {
    		return "select count (*) from (" + sql + ") t1";
    	}
    
    	/**
    	 * 返回分页语句
    	 * 
    	 * @param sql
    	 * @param pageBean
    	 * @return
    	 */
    	private String getPageSql(String sql, PageBean pageBean) {
    		int page = pageBean.getPage();
    		int rows = pageBean.getRows();
    		return sql + "limit" + (page - 1) * rows + "." + rows;
    	}
    }
    

      

      1 package com.dao.impl;
      2 
      3 import java.io.InputStream;
      4 import java.sql.Connection;
      5 import java.sql.DriverManager;
      6 import java.sql.PreparedStatement;
      7 import java.sql.ResultSet;
      8 import java.util.Properties;
      9 
     10 /**
     11  * 连接数据库操作基本类
     12  * 
     13  * @author xyls
     14  *
     15  */
     16 
     17 public class BaseDao {
     18 
     19     private static Properties properties = null;
     20     static {
     21         if (properties == null) {
     22             InputStream is = BaseDao.class.getResourceAsStream("/config.properties");
     23             properties = new Properties();
     24             try {
     25                 properties.load(is);
     26                 Class.forName(properties.getProperty("driver"));
     27             } catch (Exception e) {
     28                 throw new RuntimeException(e);
     29             }
     30         }
     31     }
     32 
     33     /**
     34      * 获取数据库连接对象
     35      * 
     36      * @return
     37      */
     38     public Connection getcon() {
     39         try {
     40             return DriverManager.getConnection(properties.getProperty("url"), properties.getProperty("user"),
     41                     properties.getProperty("pwd"));
     42 
     43         } catch (Exception e) {
     44             throw new RuntimeException(e);
     45         }
     46     }
     47 
     48     /**
     49      * 关闭数据库的连接
     50      * 
     51      * @param con
     52      * @param ps
     53      */
     54     public void close(Connection con, PreparedStatement ps) {
     55         close(con, ps, null);
     56     }
     57 
     58     /**
     59      * 关闭数据库的连接
     60      * 
     61      * @param con
     62      * @param ps
     63      */
     64     public void close(PreparedStatement ps, ResultSet rs) {
     65         close(null, ps, rs);
     66     }
     67 
     68     /**
     69      * 关闭数据库的连接
     70      * 
     71      * @param con
     72      * @param ps
     73      * @param rs
     74      */
     75     public void close(Connection con, PreparedStatement ps, ResultSet rs) {
     76         try {
     77             if (rs != null) {
     78                 rs.close();
     79             }
     80             if (ps != null) {
     81                 ps.close();
     82             }
     83             if (con != null) {
     84                 con.close();
     85             }
     86         } catch (Exception e) {
     87             throw new RuntimeException(e);
     88         }
     89     }
     90 
     91     public int a(String sql, Object... objects) {
     92         Connection con = null;
     93         PreparedStatement ps = null;
     94         try {
     95             con = getcon();
     96             ps = con.prepareStatement(sql);
     97             for (int i = 0; i < objects.length; i++) {
     98                 if (objects[i] != null) {
     99                     ps.setObject((i + 1), objects[i]);
    100                 }
    101             }
    102             return ps.executeUpdate();
    103         } catch (Exception e) {
    104             throw new RuntimeException(e);
    105         } finally {
    106             close(con, ps);
    107         }
    108     }
    109 }
     1 package com.page;
     2 
     3 /**
     4  * 分页工具类
     5  *
     6  */
     7 public class PageBean {
     8 
     9     private int page = 1;// 页码
    10 
    11     private int rows = 10;// 页大小
    12 
    13     private int total = 0;// 总记录数
    14 
    15     private boolean pagination = true;// 是否分页
    16 
    17     public PageBean() {
    18         super();
    19     }
    20 
    21     public int getPage() {
    22         return page;
    23     }
    24 
    25     public void setPage(int page) {
    26         this.page = page;
    27     }
    28 
    29     public int getRows() {
    30         return rows;
    31     }
    32 
    33     public void setRows(int rows) {
    34         this.rows = rows;
    35     }
    36 
    37     public int getTotal() {
    38         return total;
    39     }
    40 
    41     public void setTotal(int total) {
    42         this.total = total;
    43     }
    44 
    45     public void setTotal(String total) {
    46         this.total = Integer.parseInt(total);
    47     }
    48 
    49     public boolean isPagination() {
    50         return pagination;
    51     }
    52 
    53     public void setPagination(boolean pagination) {
    54         this.pagination = pagination;
    55     }
    56 
    57     /**
    58      * 获得起始记录的下标
    59      * 
    60      * @return
    61      */
    62     public int getStartIndex() {
    63         return (this.page - 1) * this.rows;
    64     }
    65 
    66     @Override
    67     public String toString() {
    68         return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]";
    69     }
    70 
    71 }
     1 package com.dao.impl;
     2 
     3 import java.sql.ResultSet;
     4 import java.util.ArrayList;
     5 import java.util.List;
     6 
     7 import com.dao.IBookDao;
     8 import com.entity.BookBean;
     9 import com.page.ICallBack;
    10 import com.page.PageBean;
    11 import com.page.PageDao;
    12 
    13 public class BookDaoImpl extends PageDao<BookBean> implements IBookDao {
    14 
    15     @Override
    16     public List<Boolean> findBookListByBookNamePage(PageBean pageBean, BookBean Bean) {
    17         StringBuffer sb=new StringBuffer();
    18         sb.append("select * from t_book");
    19         if (Bean.getBookName().length()>0) {
    20             sb.append(" where bookname like '%"+Bean.getBookName()+"%'");
    21         }
    22         return executeQueryPage(sb.toString(), pageBean, new ICallBack<BookBean>() {
    23             List<BookBean> booklist=new ArrayList<>();
    24             @Override
    25             public List<BookBean> forEach(ResultSet rs) throws Exception {
    26                 while(rs.next()) {
    27                     BookBean b=new BookBean();
    28                     b.setId(rs.getInt("id"));
    29                     b.setBookName(rs.getString("bookname"));
    30                     b.setPrice(rs.getDouble("price"));
    31                     b.setBooktype(rs.getInt("booktype"));
    32                     b.setCreateDate(rs.getDate("createdate"));
    33                     booklist.add(b);
    34                 }
    35                 return booklist;
    36                 
    37             }
    38         });
    39     }
    40 
    41     @Override
    42     public int add(BookBean bookBean) {
    43         // TODO Auto-generated method stub
    44         return executeQueryPage(sql, pageBean, iCallBack)
    45     }
    46 
    47 }
  • 相关阅读:
    UE4代码片断备份
    程序到CPU的路径
    ue4 staticMesh属性记录
    UE4网络同步属性笔记
    UE4 行为树资料
    [转]浅谈B2C的数据分析
    [转载]网站分析的最基本度量(8)——Engagement
    [转载]评测流量来源(Traffic Source)的策略
    [转载]网站分析的最基本度量(7)——Impression,Click和CTR
    [转载]为什么”Bounce Rate”应该成为一个关键度量
  • 原文地址:https://www.cnblogs.com/omji0030/p/11062502.html
Copyright © 2020-2023  润新知